@downdraft/engine 0.1.1 → 0.1.2-alpha.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1021) hide show
  1. package/app/README.md +11 -0
  2. package/app/src/renderer/bootstrap.ts +295 -19
  3. package/app/src/renderer/game-module.ts +60 -12
  4. package/app/src/renderer/hooks.ts +9 -1
  5. package/app/src/renderer/hot-reload.ts +9 -9
  6. package/app/src/renderer/mcp-harness.ts +2 -2
  7. package/app/src/renderer/standard-automation-tools.ts +104 -3
  8. package/app/src/shared/feature-log.ts +2 -1
  9. package/app/src/shared/mcp-discovery.ts +8 -3
  10. package/app/src/shared/mcp-proxy.ts +2 -2
  11. package/asset-bake/README.md +22 -0
  12. package/core/README.md +25 -0
  13. package/core/src/animation/skeleton-animator.ts +23 -5
  14. package/core/src/assets/manager.ts +4 -4
  15. package/core/src/ecs/events.ts +1 -1
  16. package/core/src/ecs/schedule.ts +1 -1
  17. package/core/src/ecs/world.ts +1 -1
  18. package/core/src/index.ts +3 -4
  19. package/core/src/library/host.ts +27 -13
  20. package/core/src/library/library.ts +13 -5
  21. package/core/src/module/cross-thread.ts +6 -0
  22. package/core/src/module/diagnostics.ts +10 -6
  23. package/core/src/module/host.ts +65 -18
  24. package/core/src/module/index.ts +1 -0
  25. package/core/src/module/module.ts +11 -5
  26. package/core/src/module/renderer-module.ts +15 -0
  27. package/core/src/physics/safety.ts +1 -1
  28. package/core/src/platform/bun-preload.ts +7 -2
  29. package/core/src/platform/glob-polyfill.ts +17 -8
  30. package/core/src/platform/pkg-root.ts +27 -0
  31. package/core/src/platform/runtime.ts +29 -0
  32. package/core/src/plugin/discovery.ts +1 -1
  33. package/core/src/plugin/extension-loaders.ts +6 -4
  34. package/core/src/plugin/host.ts +13 -13
  35. package/core/src/plugin/loader-asset.ts +5 -5
  36. package/core/src/plugin/loader-quickjs.ts +1 -1
  37. package/core/src/plugin/loader-wasm.ts +3 -3
  38. package/core/src/plugin/loader-worker.ts +1 -1
  39. package/core/src/plugin/manifest.ts +8 -3
  40. package/core/src/plugin/workshop.ts +3 -3
  41. package/core/src/profiling/index.ts +1 -1
  42. package/core/src/profiling/profiling-sab.ts +19 -0
  43. package/core/src/profiling/warnings.ts +1 -1
  44. package/core/src/profiling/worker-prelude.ts +1 -1
  45. package/core/src/render/bindless/frame-bindings.ts +1 -1
  46. package/core/src/render/bindless/material-manager.ts +2 -2
  47. package/core/src/render/bindless/texture-registry.ts +2 -2
  48. package/core/src/render/device.ts +5 -5
  49. package/core/src/render/frame-graph.ts +2 -2
  50. package/core/src/render/game-renderer.ts +42 -18
  51. package/core/src/render/hot-reload.ts +3 -3
  52. package/core/src/render/renderer-module-host.ts +32 -12
  53. package/core/src/render/shader-validator.ts +7 -7
  54. package/core/src/render/surface.ts +1 -1
  55. package/core/src/sab/errors.ts +1 -1
  56. package/core/src/sab/sab-polyfill.ts +1 -1
  57. package/core/src/save/migration-registry.ts +4 -4
  58. package/core/src/save/schema.ts +1 -1
  59. package/core/src/scene/prefab.ts +1 -1
  60. package/core/src/scene/scene-manager.ts +2 -2
  61. package/core/src/scene/scene.ts +4 -4
  62. package/core/src/scene/streaming.ts +2 -2
  63. package/core/src/scripting/hot-reload.ts +2 -2
  64. package/core/src/sim/hot-reload-pipeline.ts +30 -6
  65. package/core/src/sim/sim-state-helper.ts +1 -1
  66. package/core/src/sim/transient-state-registry.ts +1 -1
  67. package/core/src/sim/worker-loop.ts +2 -2
  68. package/core/src/telemetry/gpu-profiler.ts +3 -3
  69. package/core/src/util/index.ts +1 -1
  70. package/core/src/util/logger.ts +36 -5
  71. package/core/src/version.ts +13 -0
  72. package/core/src/worker/base-worker-host.ts +87 -25
  73. package/core/src/worker/buffer-sync.ts +1 -1
  74. package/core/src/worker/crash-recovery.ts +2 -2
  75. package/core/src/worker/instrumented-worker-host.ts +3 -3
  76. package/core/src/worker/rpc.ts +62 -11
  77. package/core/src/worker/sim-worker-base.ts +3 -8
  78. package/core/src/worker/task-pool.ts +2 -2
  79. package/dist/.dd-manifest.json +4119 -0
  80. package/dist/app/src/index.js +9 -0
  81. package/dist/app/src/renderer/bootstrap.js +446 -0
  82. package/dist/app/src/renderer/downdraft-base.css +93 -0
  83. package/dist/app/src/renderer/feature-log.js +180 -0
  84. package/dist/app/src/renderer/game-module.js +562 -0
  85. package/dist/app/src/renderer/hooks.js +82 -0
  86. package/dist/app/src/renderer/hot-reload.js +158 -0
  87. package/dist/app/src/renderer/import-cache.js +77 -0
  88. package/dist/app/src/renderer/index.js +149 -0
  89. package/dist/app/src/renderer/mcp-harness.js +112 -0
  90. package/dist/app/src/renderer/save-store-factory.js +180 -0
  91. package/dist/app/src/renderer/sim-bridge.js +138 -0
  92. package/dist/app/src/renderer/standard-automation-tools.js +720 -0
  93. package/dist/app/src/shared/feature-log.js +54 -0
  94. package/dist/app/src/shared/gpu-info.js +74 -0
  95. package/dist/app/src/shared/import-cache-store.js +123 -0
  96. package/dist/app/src/shared/index.js +4 -0
  97. package/dist/app/src/shared/mcp-discovery.js +55 -0
  98. package/dist/app/src/shared/mcp-proxy.js +71 -0
  99. package/dist/app/src/shared/types.js +13 -0
  100. package/dist/asset-bake/src/bake-audio.js +103 -0
  101. package/dist/asset-bake/src/bake-gltf.js +141 -0
  102. package/dist/asset-bake/src/bake.js +63 -0
  103. package/dist/asset-bake/src/cache.js +147 -0
  104. package/dist/asset-bake/src/config.js +93 -0
  105. package/dist/asset-bake/src/index.js +25 -0
  106. package/dist/core/src/animation/animation-event.js +24 -0
  107. package/dist/core/src/animation/bone-mask.js +103 -0
  108. package/dist/core/src/animation/clip.js +210 -0
  109. package/dist/core/src/animation/index.js +13 -0
  110. package/dist/core/src/animation/mixamo.js +78 -0
  111. package/dist/core/src/animation/morph-target.js +37 -0
  112. package/dist/core/src/animation/player.js +621 -0
  113. package/dist/core/src/animation/retarget.js +101 -0
  114. package/dist/core/src/animation/skeleton-animator.js +1361 -0
  115. package/dist/core/src/animation/skeleton.js +166 -0
  116. package/dist/core/src/animation/state-machine.js +252 -0
  117. package/dist/core/src/assets/blob-store.js +14 -0
  118. package/dist/core/src/assets/cache.js +168 -0
  119. package/dist/core/src/assets/cubemap-converter.js +129 -0
  120. package/dist/core/src/assets/environment-manager.js +84 -0
  121. package/dist/core/src/assets/import-cache.js +36 -0
  122. package/dist/core/src/assets/import-settings.js +34 -0
  123. package/dist/core/src/assets/importer.js +78 -0
  124. package/dist/core/src/assets/index.js +29 -0
  125. package/dist/core/src/assets/irradiance-generator.js +179 -0
  126. package/dist/core/src/assets/loader-audio.js +70 -0
  127. package/dist/core/src/assets/loader-cubemap.js +141 -0
  128. package/dist/core/src/assets/loader-dds.js +185 -0
  129. package/dist/core/src/assets/loader-hdr.js +430 -0
  130. package/dist/core/src/assets/loader-mesh.js +47 -0
  131. package/dist/core/src/assets/loader-shader.js +61 -0
  132. package/dist/core/src/assets/loader-texture.js +264 -0
  133. package/dist/core/src/assets/lod.js +150 -0
  134. package/dist/core/src/assets/manager.js +401 -0
  135. package/dist/core/src/assets/manifest.js +57 -0
  136. package/dist/core/src/assets/material-bridge.js +160 -0
  137. package/dist/core/src/assets/model-importer.js +32 -0
  138. package/dist/core/src/assets/model-normalizer.js +213 -0
  139. package/dist/core/src/assets/model-to-gpu.js +44 -0
  140. package/dist/core/src/assets/model-to-mesh.js +171 -0
  141. package/dist/core/src/assets/prefilter-generator.js +220 -0
  142. package/dist/core/src/audio/engine.js +153 -0
  143. package/dist/core/src/audio/interface.js +8 -0
  144. package/dist/core/src/audio/listener.js +19 -0
  145. package/dist/core/src/audio/mixer.js +124 -0
  146. package/dist/core/src/audio/registry.js +43 -0
  147. package/dist/core/src/audio/sab.js +74 -0
  148. package/dist/core/src/audio/source.js +60 -0
  149. package/dist/core/src/change-detection/atomics.js +1 -0
  150. package/dist/core/src/change-detection/tracker.js +26 -0
  151. package/dist/core/src/debug-draw/lines.js +27 -0
  152. package/dist/core/src/debug-draw/points.js +9 -0
  153. package/dist/core/src/debug-draw/queue.js +77 -0
  154. package/dist/core/src/debug-draw/text.js +12 -0
  155. package/dist/core/src/ecs/archetype.js +271 -0
  156. package/dist/core/src/ecs/component.js +109 -0
  157. package/dist/core/src/ecs/entity.js +11 -0
  158. package/dist/core/src/ecs/events.js +73 -0
  159. package/dist/core/src/ecs/hierarchy.js +104 -0
  160. package/dist/core/src/ecs/hmr-swap-registry.js +15 -0
  161. package/dist/core/src/ecs/index.js +14 -0
  162. package/dist/core/src/ecs/query.js +110 -0
  163. package/dist/core/src/ecs/resource.js +3 -0
  164. package/dist/core/src/ecs/schedule.js +157 -0
  165. package/dist/core/src/ecs/system-params.js +45 -0
  166. package/dist/core/src/ecs/system.js +18 -0
  167. package/dist/core/src/ecs/world.js +292 -0
  168. package/dist/core/src/index.js +191 -0
  169. package/dist/core/src/input/context.js +69 -0
  170. package/dist/core/src/input/dom-handler.js +288 -0
  171. package/dist/core/src/input/local-player-manager.js +145 -0
  172. package/dist/core/src/input/mapping.js +36 -0
  173. package/dist/core/src/input/multi-sab-bridge.js +224 -0
  174. package/dist/core/src/input/multi-state.js +48 -0
  175. package/dist/core/src/input/sab-bridge.js +66 -0
  176. package/dist/core/src/input/state.js +108 -0
  177. package/dist/core/src/input/ui-router.js +76 -0
  178. package/dist/core/src/library/host.js +291 -0
  179. package/dist/core/src/library/index.js +1 -0
  180. package/dist/core/src/library/library.js +20 -0
  181. package/dist/core/src/material/compiler.js +73 -0
  182. package/dist/core/src/material/graph-bridge.js +119 -0
  183. package/dist/core/src/material/index.js +6 -0
  184. package/dist/core/src/material/library.js +414 -0
  185. package/dist/core/src/material/material.js +120 -0
  186. package/dist/core/src/material/variants.js +37 -0
  187. package/dist/core/src/math/mat4.js +198 -0
  188. package/dist/core/src/math/perlin-noise-2d.js +66 -0
  189. package/dist/core/src/math/perlin-noise-3d.js +76 -0
  190. package/dist/core/src/math/quat.js +29 -0
  191. package/dist/core/src/math/rng.js +25 -0
  192. package/dist/core/src/math/trig.js +42 -0
  193. package/dist/core/src/math/value-noise.js +49 -0
  194. package/dist/core/src/mesh/builder.js +137 -0
  195. package/dist/core/src/mesh/csg.js +250 -0
  196. package/dist/core/src/mesh/greased-line.js +102 -0
  197. package/dist/core/src/mesh/mesh.js +6 -0
  198. package/dist/core/src/mesh/parametric.js +392 -0
  199. package/dist/core/src/mesh/skinning.js +30 -0
  200. package/dist/core/src/mesh/vertex-layout.js +65 -0
  201. package/dist/core/src/module/cross-thread.js +126 -0
  202. package/dist/core/src/module/diagnostics.js +99 -0
  203. package/dist/core/src/module/host.js +449 -0
  204. package/dist/core/src/module/index.js +6 -0
  205. package/dist/core/src/module/module.js +1 -0
  206. package/dist/core/src/module/registry.js +83 -0
  207. package/dist/core/src/module/renderer-module.js +13 -0
  208. package/dist/core/src/module/ts-loader.js +20 -0
  209. package/dist/core/src/particles/compute-pass.js +329 -0
  210. package/dist/core/src/particles/emitter.js +113 -0
  211. package/dist/core/src/particles/index.js +7 -0
  212. package/dist/core/src/particles/particle-data.js +33 -0
  213. package/dist/core/src/particles/render-pass.js +338 -0
  214. package/dist/core/src/particles/simulator.js +224 -0
  215. package/dist/core/src/particles/system.js +157 -0
  216. package/dist/core/src/physics/body.js +25 -0
  217. package/dist/core/src/physics/ccd-heuristic.js +46 -0
  218. package/dist/core/src/physics/character.js +184 -0
  219. package/dist/core/src/physics/collider.js +36 -0
  220. package/dist/core/src/physics/collision-system.js +62 -0
  221. package/dist/core/src/physics/events.js +74 -0
  222. package/dist/core/src/physics/index.js +24 -0
  223. package/dist/core/src/physics/interface.js +14 -0
  224. package/dist/core/src/physics/interpolation-buffer.js +182 -0
  225. package/dist/core/src/physics/lifecycle.js +66 -0
  226. package/dist/core/src/physics/load-shedder.js +155 -0
  227. package/dist/core/src/physics/physics-accumulator.js +94 -0
  228. package/dist/core/src/physics/physics-system.js +142 -0
  229. package/dist/core/src/physics/ragdoll-presets.js +248 -0
  230. package/dist/core/src/physics/ragdoll-system.js +193 -0
  231. package/dist/core/src/physics/ragdoll.js +117 -0
  232. package/dist/core/src/physics/raycast.js +97 -0
  233. package/dist/core/src/physics/realm-manager.js +431 -0
  234. package/dist/core/src/physics/realm-worker-pool.js +181 -0
  235. package/dist/core/src/physics/realm-worker.js +91 -0
  236. package/dist/core/src/physics/realm.js +137 -0
  237. package/dist/core/src/physics/registry.js +43 -0
  238. package/dist/core/src/physics/safety.js +211 -0
  239. package/dist/core/src/physics/snapshot-manager.js +118 -0
  240. package/dist/core/src/physics/worker-protocol.js +1 -0
  241. package/dist/core/src/platform/bun-preload.js +175 -0
  242. package/dist/core/src/platform/css-stub.js +4 -0
  243. package/dist/core/src/platform/glob-polyfill.js +137 -0
  244. package/dist/core/src/platform/hidpi.js +52 -0
  245. package/dist/core/src/platform/pkg-root.js +27 -0
  246. package/dist/core/src/platform/render-surface.js +15 -0
  247. package/dist/core/src/platform/rpc.js +82 -0
  248. package/dist/core/src/platform/runtime.js +93 -0
  249. package/dist/core/src/plugin/context.js +144 -0
  250. package/dist/core/src/plugin/diagnostics.js +20 -0
  251. package/dist/core/src/plugin/discovery.js +124 -0
  252. package/dist/core/src/plugin/extension-loaders.js +111 -0
  253. package/dist/core/src/plugin/host.js +542 -0
  254. package/dist/core/src/plugin/index.js +19 -0
  255. package/dist/core/src/plugin/loader-asset.js +105 -0
  256. package/dist/core/src/plugin/loader-quickjs.js +67 -0
  257. package/dist/core/src/plugin/loader-wasm.js +385 -0
  258. package/dist/core/src/plugin/loader-worker.js +228 -0
  259. package/dist/core/src/plugin/manifest.js +424 -0
  260. package/dist/core/src/plugin/material-registry.js +44 -0
  261. package/dist/core/src/plugin/mcp-tools.js +147 -0
  262. package/dist/core/src/plugin/permissions.js +152 -0
  263. package/dist/core/src/plugin/quickjs-bridge.js +219 -0
  264. package/dist/core/src/plugin/registry.js +92 -0
  265. package/dist/core/src/plugin/sandbox-shim.js +79 -0
  266. package/dist/core/src/plugin/sandbox-worker.js +194 -0
  267. package/dist/core/src/plugin/wasm-abi.js +62 -0
  268. package/dist/core/src/plugin/wasm-worker.js +234 -0
  269. package/dist/core/src/plugin/workshop.js +131 -0
  270. package/dist/core/src/profiling/event-loop.js +164 -0
  271. package/dist/core/src/profiling/index.js +23 -0
  272. package/dist/core/src/profiling/iops/idb-patch.js +211 -0
  273. package/dist/core/src/profiling/iops/opfs-patch.js +206 -0
  274. package/dist/core/src/profiling/profiling-sab.js +632 -0
  275. package/dist/core/src/profiling/task-latency.js +118 -0
  276. package/dist/core/src/profiling/thread-metrics.js +103 -0
  277. package/dist/core/src/profiling/trace-event-writer.js +165 -0
  278. package/dist/core/src/profiling/warnings.js +304 -0
  279. package/dist/core/src/profiling/worker-prelude.js +281 -0
  280. package/dist/core/src/render/bind-group.js +33 -0
  281. package/dist/core/src/render/bindless/bindless-struct.js +39 -0
  282. package/dist/core/src/render/bindless/bindless.wgsl.js +163 -0
  283. package/dist/core/src/render/bindless/frame-bindings.js +142 -0
  284. package/dist/core/src/render/bindless/index.js +6 -0
  285. package/dist/core/src/render/bindless/material-manager.js +182 -0
  286. package/dist/core/src/render/bindless/texture-registry.js +498 -0
  287. package/dist/core/src/render/buffer.js +74 -0
  288. package/dist/core/src/render/camera-2d.js +151 -0
  289. package/dist/core/src/render/camera-controller.js +370 -0
  290. package/dist/core/src/render/camera.js +332 -0
  291. package/dist/core/src/render/canvas-resize-watcher.js +36 -0
  292. package/dist/core/src/render/compute-kernel.js +130 -0
  293. package/dist/core/src/render/constants.js +2 -0
  294. package/dist/core/src/render/device.js +91 -0
  295. package/dist/core/src/render/frame-graph.js +594 -0
  296. package/dist/core/src/render/frustum.js +152 -0
  297. package/dist/core/src/render/fullscreen-vs.js +24 -0
  298. package/dist/core/src/render/g-buffer.js +156 -0
  299. package/dist/core/src/render/game-renderer.js +1165 -0
  300. package/dist/core/src/render/gpu-driven/cull-pass.js +352 -0
  301. package/dist/core/src/render/gpu-driven/hzb.js +183 -0
  302. package/dist/core/src/render/gpu-driven/index.js +6 -0
  303. package/dist/core/src/render/gpu-driven/indirect-draw-pass.js +300 -0
  304. package/dist/core/src/render/gpu-driven/instance-buffer.js +150 -0
  305. package/dist/core/src/render/gpu-driven/mesh-table.js +130 -0
  306. package/dist/core/src/render/gpu-driven/passes/hzb-build-pass.js +39 -0
  307. package/dist/core/src/render/gpu-utils.js +72 -0
  308. package/dist/core/src/render/hdr.js +69 -0
  309. package/dist/core/src/render/hot-reload.js +236 -0
  310. package/dist/core/src/render/ibl-bind-group.js +232 -0
  311. package/dist/core/src/render/ibl.js +148 -0
  312. package/dist/core/src/render/index.js +86 -0
  313. package/dist/core/src/render/input-manager.js +224 -0
  314. package/dist/core/src/render/lighting/area-light.js +142 -0
  315. package/dist/core/src/render/lighting/cluster-grid.js +255 -0
  316. package/dist/core/src/render/lighting/cluster-types.js +87 -0
  317. package/dist/core/src/render/lighting/ies-parser.js +111 -0
  318. package/dist/core/src/render/lighting.js +300 -0
  319. package/dist/core/src/render/material-types/depth.wgsl +44 -0
  320. package/dist/core/src/render/material-types/line.wgsl +50 -0
  321. package/dist/core/src/render/material-types/matcap.wgsl +51 -0
  322. package/dist/core/src/render/material-types/normal.wgsl +41 -0
  323. package/dist/core/src/render/material-types/physical.wgsl +152 -0
  324. package/dist/core/src/render/material-types/sprite.wgsl +46 -0
  325. package/dist/core/src/render/material-types/sss.wgsl +79 -0
  326. package/dist/core/src/render/material-types/toon.wgsl +79 -0
  327. package/dist/core/src/render/passes/README.md +121 -0
  328. package/dist/core/src/render/passes/atmosphere.js +107 -0
  329. package/dist/core/src/render/passes/cluster-lighting-pass.js +441 -0
  330. package/dist/core/src/render/passes/csm.js +338 -0
  331. package/dist/core/src/render/passes/cubemap-capture.js +93 -0
  332. package/dist/core/src/render/passes/debug-viz.js +248 -0
  333. package/dist/core/src/render/passes/debug.js +500 -0
  334. package/dist/core/src/render/passes/decal-mesh.js +86 -0
  335. package/dist/core/src/render/passes/decal-pass.js +344 -0
  336. package/dist/core/src/render/passes/deferred-lighting.js +406 -0
  337. package/dist/core/src/render/passes/depth-prepass.js +148 -0
  338. package/dist/core/src/render/passes/dome-360.js +68 -0
  339. package/dist/core/src/render/passes/fluid-render.js +116 -0
  340. package/dist/core/src/render/passes/gi-types.js +78 -0
  341. package/dist/core/src/render/passes/graph-compute.js +251 -0
  342. package/dist/core/src/render/passes/greased-line-pass.js +218 -0
  343. package/dist/core/src/render/passes/morph-target.js +35 -0
  344. package/dist/core/src/render/passes/opaque.js +966 -0
  345. package/dist/core/src/render/passes/point-light-shadow.js +221 -0
  346. package/dist/core/src/render/passes/procedural-texture.js +142 -0
  347. package/dist/core/src/render/passes/reflection-probe.js +100 -0
  348. package/dist/core/src/render/passes/rsm-pass.js +228 -0
  349. package/dist/core/src/render/passes/sdf-text.js +114 -0
  350. package/dist/core/src/render/passes/shadow-map.js +121 -0
  351. package/dist/core/src/render/passes/shadow.js +191 -0
  352. package/dist/core/src/render/passes/skinning-vs.js +102 -0
  353. package/dist/core/src/render/passes/skinning.js +282 -0
  354. package/dist/core/src/render/passes/sky-dome.js +380 -0
  355. package/dist/core/src/render/passes/skybox.js +146 -0
  356. package/dist/core/src/render/passes/spot-light-shadow.js +223 -0
  357. package/dist/core/src/render/passes/terrain.js +303 -0
  358. package/dist/core/src/render/passes/transparent.js +323 -0
  359. package/dist/core/src/render/passes/underwater-fog.js +173 -0
  360. package/dist/core/src/render/passes/video-texture.js +58 -0
  361. package/dist/core/src/render/passes/volumetric-pass.js +278 -0
  362. package/dist/core/src/render/passes/volumetric-types.js +96 -0
  363. package/dist/core/src/render/passes/water.js +697 -0
  364. package/dist/core/src/render/pbr.js +257 -0
  365. package/dist/core/src/render/pipeline.js +49 -0
  366. package/dist/core/src/render/render-pass.js +13 -0
  367. package/dist/core/src/render/renderer-input-bus.js +176 -0
  368. package/dist/core/src/render/renderer-module-host.js +539 -0
  369. package/dist/core/src/render/resource-tracker.js +59 -0
  370. package/dist/core/src/render/sab-canvas-overlay.js +83 -0
  371. package/dist/core/src/render/shader-validator.js +172 -0
  372. package/dist/core/src/render/shaders/debug/debug-line.wgsl +27 -0
  373. package/dist/core/src/render/shaders/debug/debug-point.wgsl +30 -0
  374. package/dist/core/src/render/shaders/debug/debug-text.wgsl +42 -0
  375. package/dist/core/src/render/shaders/debug-viz/aabb.wgsl +20 -0
  376. package/dist/core/src/render/shaders/debug-viz/depth.wgsl +29 -0
  377. package/dist/core/src/render/shaders/debug-viz/lod.wgsl +38 -0
  378. package/dist/core/src/render/shaders/debug-viz/normals.wgsl +30 -0
  379. package/dist/core/src/render/shaders/debug-viz/overdraw.wgsl +21 -0
  380. package/dist/core/src/render/shaders/debug-viz/tangents.wgsl +29 -0
  381. package/dist/core/src/render/shaders/debug-viz/wireframe.wgsl +33 -0
  382. package/dist/core/src/render/shaders/shadow-chunks.js +133 -0
  383. package/dist/core/src/render/skybox.js +123 -0
  384. package/dist/core/src/render/splitscreen.js +60 -0
  385. package/dist/core/src/render/surface.js +63 -0
  386. package/dist/core/src/render/tonemap.js +171 -0
  387. package/dist/core/src/render/tracked-render-pass.js +115 -0
  388. package/dist/core/src/render/viewport.js +81 -0
  389. package/dist/core/src/render/wgsl-hmr.js +66 -0
  390. package/dist/core/src/sab/core-input-channel.js +22 -0
  391. package/dist/core/src/sab/define.js +127 -0
  392. package/dist/core/src/sab/errors.js +60 -0
  393. package/dist/core/src/sab/game-input.js +299 -0
  394. package/dist/core/src/sab/gamepad-devices.js +205 -0
  395. package/dist/core/src/sab/grid-buffer.js +91 -0
  396. package/dist/core/src/sab/input.js +38 -0
  397. package/dist/core/src/sab/layout.js +160 -0
  398. package/dist/core/src/sab/multi-input-channel.js +39 -0
  399. package/dist/core/src/sab/record-buffer.js +130 -0
  400. package/dist/core/src/sab/sab-polyfill.js +47 -0
  401. package/dist/core/src/sab/sim-channel.js +397 -0
  402. package/dist/core/src/sab/slot-buffer.js +140 -0
  403. package/dist/core/src/sab/types.js +1 -0
  404. package/dist/core/src/safety/bounds.js +71 -0
  405. package/dist/core/src/safety/json.js +70 -0
  406. package/dist/core/src/safety/path.js +151 -0
  407. package/dist/core/src/save/binary-format.js +95 -0
  408. package/dist/core/src/save/game-save-system.js +101 -0
  409. package/dist/core/src/save/grid-save-system.js +102 -0
  410. package/dist/core/src/save/migrate.js +35 -0
  411. package/dist/core/src/save/migration-registry.js +66 -0
  412. package/dist/core/src/save/persist-types.js +4 -0
  413. package/dist/core/src/save/schema.js +36 -0
  414. package/dist/core/src/save/serializer.js +139 -0
  415. package/dist/core/src/scene/builder.js +31 -0
  416. package/dist/core/src/scene/camera.js +118 -0
  417. package/dist/core/src/scene/checkpoint.js +84 -0
  418. package/dist/core/src/scene/game-loop.js +155 -0
  419. package/dist/core/src/scene/index.js +14 -0
  420. package/dist/core/src/scene/layer.js +7 -0
  421. package/dist/core/src/scene/prefab.js +97 -0
  422. package/dist/core/src/scene/scene-manager.js +141 -0
  423. package/dist/core/src/scene/scene.js +147 -0
  424. package/dist/core/src/scene/sky.js +179 -0
  425. package/dist/core/src/scene/spatial-grid.js +140 -0
  426. package/dist/core/src/scene/streaming.js +247 -0
  427. package/dist/core/src/scene/vegetation.js +107 -0
  428. package/dist/core/src/scene/world.js +66 -0
  429. package/dist/core/src/scripting/binding.js +85 -0
  430. package/dist/core/src/scripting/hot-reload.js +123 -0
  431. package/dist/core/src/scripting/script.js +68 -0
  432. package/dist/core/src/sim/hot-reload-pipeline.js +65 -0
  433. package/dist/core/src/sim/sim-state-helper.js +40 -0
  434. package/dist/core/src/sim/transient-state-registry.js +63 -0
  435. package/dist/core/src/sim/types.js +4 -0
  436. package/dist/core/src/sim/worker-loop.js +168 -0
  437. package/dist/core/src/stores/game-store.js +81 -0
  438. package/dist/core/src/stores/hot-reload-store.js +19 -0
  439. package/dist/core/src/telemetry/collector.js +303 -0
  440. package/dist/core/src/telemetry/gc-controller.js +365 -0
  441. package/dist/core/src/telemetry/gc-profiler.js +82 -0
  442. package/dist/core/src/telemetry/gc-tracker.js +63 -0
  443. package/dist/core/src/telemetry/gpu-profiler.js +554 -0
  444. package/dist/core/src/telemetry/gpu-resource-tracker.js +234 -0
  445. package/dist/core/src/telemetry/gpu-timer-pool.js +223 -0
  446. package/dist/core/src/telemetry/gpu-timer.js +117 -0
  447. package/dist/core/src/telemetry/gpu-timestamp-gate.js +22 -0
  448. package/dist/core/src/telemetry/reporter.js +56 -0
  449. package/dist/core/src/types/engine-types.js +21 -0
  450. package/dist/core/src/ui-font-scale.js +111 -0
  451. package/dist/core/src/util/broad-phase-grid.js +77 -0
  452. package/dist/core/src/util/feature-log.js +176 -0
  453. package/dist/core/src/util/index.js +4 -0
  454. package/dist/core/src/util/logger.js +596 -0
  455. package/dist/core/src/version.js +11 -0
  456. package/dist/core/src/webgpu-destroy-augmentation.d.ts +25 -0
  457. package/dist/core/src/worker/base-worker-host.js +212 -0
  458. package/dist/core/src/worker/buffer-sync.js +454 -0
  459. package/dist/core/src/worker/crash-recovery.js +153 -0
  460. package/dist/core/src/worker/entity-sim-worker-host.js +128 -0
  461. package/dist/core/src/worker/instrumented-worker-host.js +139 -0
  462. package/dist/core/src/worker/rpc.js +244 -0
  463. package/dist/core/src/worker/sim-worker-base.js +558 -0
  464. package/dist/core/src/worker/sim-worker-host.js +271 -0
  465. package/dist/core/src/worker/task-pool.js +205 -0
  466. package/dist/core/src/worker/task-worker.js +77 -0
  467. package/dist/libraries/asset-browser/src/index.js +10 -0
  468. package/dist/libraries/asset-browser/src/software-thumbnails.js +940 -0
  469. package/dist/libraries/audio-kira/src/backend.js +405 -0
  470. package/dist/libraries/audio-kira/src/index.js +4 -0
  471. package/dist/libraries/audio-kira/src/library.js +54 -0
  472. package/dist/libraries/blitz-ui/src/index.js +13 -0
  473. package/dist/libraries/blitz-ui/src/native-module.js +162 -0
  474. package/dist/libraries/blitz-ui/src/native-osr-ffi.js +409 -0
  475. package/dist/libraries/blitz-ui/src/router.js +82 -0
  476. package/dist/libraries/blitz-ui/src/shaders/ui-blit.wgsl.js +32 -0
  477. package/dist/libraries/blitz-ui/src/ui-blit-pass.js +108 -0
  478. package/dist/libraries/character/src/character-animator.js +323 -0
  479. package/dist/libraries/character/src/customization.js +464 -0
  480. package/dist/libraries/character/src/index.js +19 -0
  481. package/dist/libraries/character/src/inspectable.js +77 -0
  482. package/dist/libraries/character/src/loader.js +336 -0
  483. package/dist/libraries/character/src/locomotion.js +84 -0
  484. package/dist/libraries/character/src/preview.js +280 -0
  485. package/dist/libraries/devtools/src/backend.js +449 -0
  486. package/dist/libraries/devtools/src/cdp-bridge.js +293 -0
  487. package/dist/libraries/devtools/src/collectors.js +318 -0
  488. package/dist/libraries/devtools/src/index.js +31 -0
  489. package/dist/libraries/devtools/src/native-providers.js +749 -0
  490. package/dist/libraries/devtools/src/snapshot.js +35 -0
  491. package/dist/libraries/devtools/src/verify.js +139 -0
  492. package/dist/libraries/devtools/src/web/browser.js +94 -0
  493. package/dist/libraries/devtools/src/web/host.js +183 -0
  494. package/dist/libraries/devtools/src/web/mirror.js +26 -0
  495. package/dist/libraries/devtools/src/web/server.js +187 -0
  496. package/dist/libraries/entities/src/index.js +3 -0
  497. package/dist/libraries/entities/src/library.js +46 -0
  498. package/dist/libraries/entities/src/model-renderer.js +1307 -0
  499. package/dist/libraries/entities/src/shaders/model.wgsl +375 -0
  500. package/dist/libraries/gamepad/src/feed-input.js +54 -0
  501. package/dist/libraries/gamepad/src/filters.js +44 -0
  502. package/dist/libraries/gamepad/src/glyphs.js +83 -0
  503. package/dist/libraries/gamepad/src/hub.js +164 -0
  504. package/dist/libraries/gamepad/src/index.js +10 -0
  505. package/dist/libraries/gamepad/src/library.js +56 -0
  506. package/dist/libraries/gamepad/src/source-sab.js +62 -0
  507. package/dist/libraries/gamepad/src/sysfs-enrich.js +125 -0
  508. package/dist/libraries/gaussian-splats/src/gpu-sort.js +506 -0
  509. package/dist/libraries/gaussian-splats/src/index.js +8 -0
  510. package/dist/libraries/gaussian-splats/src/library.js +44 -0
  511. package/dist/libraries/gaussian-splats/src/parser.js +297 -0
  512. package/dist/libraries/gaussian-splats/src/renderer.js +368 -0
  513. package/dist/libraries/gaussian-splats/src/sh-eval.js +196 -0
  514. package/dist/libraries/gaussian-splats/src/sorter.js +76 -0
  515. package/dist/libraries/gaussian-splats/src/tile-raster.js +424 -0
  516. package/dist/libraries/gpu-kernels/src/index.js +8 -0
  517. package/dist/libraries/gpu-kernels/src/kernel.js +591 -0
  518. package/dist/libraries/gpu-kernels/src/transpile.js +896 -0
  519. package/dist/libraries/html-ui-kit/src/behaviors.js +231 -0
  520. package/dist/libraries/html-ui-kit/src/components.js +219 -0
  521. package/dist/libraries/html-ui-kit/src/index.js +17 -0
  522. package/dist/libraries/html-ui-kit/src/nav/nav-controller.js +215 -0
  523. package/dist/libraries/html-ui-kit/src/nav/nav-input.js +138 -0
  524. package/dist/libraries/html-ui-kit/src/nav/osk.js +135 -0
  525. package/dist/libraries/html-ui-kit/src/nav/router.js +152 -0
  526. package/dist/libraries/html-ui-kit/src/nav/vcursor.js +177 -0
  527. package/dist/libraries/html-ui-kit/src/ten-foot.js +138 -0
  528. package/dist/libraries/html-ui-kit/src/theme.js +235 -0
  529. package/dist/libraries/inspectable/src/index.js +6 -0
  530. package/dist/libraries/inspectable/src/inspectable.js +205 -0
  531. package/dist/libraries/lighting/src/index.js +4 -0
  532. package/dist/libraries/lighting/src/library.js +48 -0
  533. package/dist/libraries/lighting/src/light-system.js +395 -0
  534. package/dist/libraries/lighting/src/lighting-system.js +57 -0
  535. package/dist/libraries/lighting/src/shaders/light-debug.wgsl +30 -0
  536. package/dist/libraries/marching-cubes/src/chunked-field.js +130 -0
  537. package/dist/libraries/marching-cubes/src/deformation.js +41 -0
  538. package/dist/libraries/marching-cubes/src/generator.js +356 -0
  539. package/dist/libraries/marching-cubes/src/index.js +13 -0
  540. package/dist/libraries/marching-cubes/src/library.js +54 -0
  541. package/dist/libraries/marching-cubes/src/lod.js +95 -0
  542. package/dist/libraries/marching-cubes/src/marching-tetrahedra.js +261 -0
  543. package/dist/libraries/marching-cubes/src/sab.js +40 -0
  544. package/dist/libraries/marching-cubes/src/streaming-config.js +28 -0
  545. package/dist/libraries/marching-cubes/src/streaming-manager.js +490 -0
  546. package/dist/libraries/marching-cubes/src/tables.js +314 -0
  547. package/dist/libraries/marching-cubes/src/types.js +1 -0
  548. package/dist/libraries/models/src/bake-node-transforms.js +146 -0
  549. package/dist/libraries/models/src/bind-unskinned-meshes.js +145 -0
  550. package/dist/libraries/models/src/codecs/basisu-codec.js +134 -0
  551. package/dist/libraries/models/src/codecs/draco-codec.js +236 -0
  552. package/dist/libraries/models/src/codecs/draco3dgltf.d.ts +40 -0
  553. package/dist/libraries/models/src/codecs/index.js +5 -0
  554. package/dist/libraries/models/src/codecs/meshopt-codec.js +59 -0
  555. package/dist/libraries/models/src/codecs/registry.js +111 -0
  556. package/dist/libraries/models/src/dae.js +665 -0
  557. package/dist/libraries/models/src/default-part-selection.js +58 -0
  558. package/dist/libraries/models/src/dxf.js +235 -0
  559. package/dist/libraries/models/src/fbx/index.js +438 -0
  560. package/dist/libraries/models/src/fbx/interpreter/animation.js +369 -0
  561. package/dist/libraries/models/src/fbx/interpreter/blend-shapes.js +283 -0
  562. package/dist/libraries/models/src/fbx/interpreter/connections.js +158 -0
  563. package/dist/libraries/models/src/fbx/interpreter/diagnostics.js +48 -0
  564. package/dist/libraries/models/src/fbx/interpreter/geometry.js +430 -0
  565. package/dist/libraries/models/src/fbx/interpreter/global-settings.js +77 -0
  566. package/dist/libraries/models/src/fbx/interpreter/materials.js +231 -0
  567. package/dist/libraries/models/src/fbx/interpreter/nodes.js +168 -0
  568. package/dist/libraries/models/src/fbx/interpreter/skeleton.js +454 -0
  569. package/dist/libraries/models/src/fbx/parsers/binary-parser.js +217 -0
  570. package/dist/libraries/models/src/fbx/types.js +88 -0
  571. package/dist/libraries/models/src/gltf-extensions.js +121 -0
  572. package/dist/libraries/models/src/gltf.js +724 -0
  573. package/dist/libraries/models/src/index.js +46 -0
  574. package/dist/libraries/models/src/library.js +44 -0
  575. package/dist/libraries/models/src/loader.js +218 -0
  576. package/dist/libraries/models/src/material-adapter.js +82 -0
  577. package/dist/libraries/models/src/mini-xml.js +145 -0
  578. package/dist/libraries/models/src/normalize.js +168 -0
  579. package/dist/libraries/models/src/obj.js +247 -0
  580. package/dist/libraries/models/src/off.js +94 -0
  581. package/dist/libraries/models/src/ply.js +329 -0
  582. package/dist/libraries/models/src/pose-sampler.js +183 -0
  583. package/dist/libraries/models/src/sidecar/blender-extras.js +32 -0
  584. package/dist/libraries/models/src/sidecar/ddmeta.js +98 -0
  585. package/dist/libraries/models/src/sidecar/godot-import.js +76 -0
  586. package/dist/libraries/models/src/sidecar/resolver.js +112 -0
  587. package/dist/libraries/models/src/sidecar/types.js +8 -0
  588. package/dist/libraries/models/src/sidecar/unity-meta.js +46 -0
  589. package/dist/libraries/models/src/skeleton-synthesis.js +122 -0
  590. package/dist/libraries/models/src/stl.js +129 -0
  591. package/dist/libraries/models/src/threeds.js +312 -0
  592. package/dist/libraries/models/src/threemf.js +203 -0
  593. package/dist/libraries/models/src/types.js +33 -0
  594. package/dist/libraries/models/src/vtk.js +242 -0
  595. package/dist/libraries/navmesh/src/crowd-system.js +207 -0
  596. package/dist/libraries/navmesh/src/debug-viz.js +52 -0
  597. package/dist/libraries/navmesh/src/index.js +7 -0
  598. package/dist/libraries/navmesh/src/library.js +47 -0
  599. package/dist/libraries/navmesh/src/navmesh-generator.js +364 -0
  600. package/dist/libraries/navmesh/src/navmesh.js +141 -0
  601. package/dist/libraries/navmesh/src/pathfinder.js +221 -0
  602. package/dist/libraries/navmesh/src/types.js +1 -0
  603. package/dist/libraries/networking/src/authority.js +107 -0
  604. package/dist/libraries/networking/src/connection.js +107 -0
  605. package/dist/libraries/networking/src/discovery.js +314 -0
  606. package/dist/libraries/networking/src/enhanced-replication.js +282 -0
  607. package/dist/libraries/networking/src/epic-adapter.js +101 -0
  608. package/dist/libraries/networking/src/index.js +16 -0
  609. package/dist/libraries/networking/src/library.js +45 -0
  610. package/dist/libraries/networking/src/lobby.js +84 -0
  611. package/dist/libraries/networking/src/platform-adapter.js +92 -0
  612. package/dist/libraries/networking/src/rcs-adapter.js +100 -0
  613. package/dist/libraries/networking/src/remote-input.js +162 -0
  614. package/dist/libraries/networking/src/replication.js +273 -0
  615. package/dist/libraries/networking/src/rpc.js +172 -0
  616. package/dist/libraries/networking/src/session.js +129 -0
  617. package/dist/libraries/networking/src/transport.js +156 -0
  618. package/dist/libraries/networking/src/webrtc.js +266 -0
  619. package/dist/libraries/pathfinding-2d/src/astar-grid.js +255 -0
  620. package/dist/libraries/pathfinding-2d/src/index.js +9 -0
  621. package/dist/libraries/persistence/src/autosave-manager.js +94 -0
  622. package/dist/libraries/persistence/src/binary-record-store.js +205 -0
  623. package/dist/libraries/persistence/src/browser.js +16 -0
  624. package/dist/libraries/persistence/src/file-save-store.js +507 -0
  625. package/dist/libraries/persistence/src/hash-utils.js +54 -0
  626. package/dist/libraries/persistence/src/index.js +17 -0
  627. package/dist/libraries/persistence/src/library.js +51 -0
  628. package/dist/libraries/persistence/src/mock-opfs.js +114 -0
  629. package/dist/libraries/persistence/src/node-fs-directory-handle.js +168 -0
  630. package/dist/libraries/persistence/src/opfs-save-store.js +584 -0
  631. package/dist/libraries/persistence/src/save-worker-proxy.js +96 -0
  632. package/dist/libraries/persistence/src/save-worker.js +76 -0
  633. package/dist/libraries/persistence/src/xxh3-ts.d.ts +10 -0
  634. package/dist/libraries/physics-native/src/backend.js +960 -0
  635. package/dist/libraries/physics-native/src/broadphase.js +79 -0
  636. package/dist/libraries/physics-native/src/index.js +6 -0
  637. package/dist/libraries/physics-native/src/library.js +57 -0
  638. package/dist/libraries/physics-native/src/narrowphase-shapes.js +348 -0
  639. package/dist/libraries/physics-native/src/narrowphase.js +60 -0
  640. package/dist/libraries/physics-native/src/solver.js +105 -0
  641. package/dist/libraries/physics-native/src/types.js +4 -0
  642. package/dist/libraries/physics-rapier/src/api.js +352 -0
  643. package/dist/libraries/physics-rapier/src/auto-backend.js +54 -0
  644. package/dist/libraries/physics-rapier/src/backend.js +1066 -0
  645. package/dist/libraries/physics-rapier/src/bulk-ops.js +46 -0
  646. package/dist/libraries/physics-rapier/src/ffi-backend.js +17 -0
  647. package/dist/libraries/physics-rapier/src/ffi-lib.js +605 -0
  648. package/dist/libraries/physics-rapier/src/index.js +9 -0
  649. package/dist/libraries/physics-rapier/src/library.js +71 -0
  650. package/dist/libraries/physics-rapier/src/rapier-backend.js +1102 -0
  651. package/dist/libraries/physics-rapier/src/realm-worker-script.js +233 -0
  652. package/dist/libraries/postfx/src/index.js +14 -0
  653. package/dist/libraries/postfx/src/library.js +207 -0
  654. package/dist/libraries/postfx/src/post-process-stack.js +1641 -0
  655. package/dist/libraries/postfx/src/shaders/post-process/afterimage.wgsl +14 -0
  656. package/dist/libraries/postfx/src/shaders/post-process/ascii.wgsl +24 -0
  657. package/dist/libraries/postfx/src/shaders/post-process/blit.wgsl +12 -0
  658. package/dist/libraries/postfx/src/shaders/post-process/bloom-blur.wgsl +21 -0
  659. package/dist/libraries/postfx/src/shaders/post-process/bloom-bright.wgsl +15 -0
  660. package/dist/libraries/postfx/src/shaders/post-process/bloom-composite.wgsl +14 -0
  661. package/dist/libraries/postfx/src/shaders/post-process/bloom-downsample.wgsl +60 -0
  662. package/dist/libraries/postfx/src/shaders/post-process/bloom-soft.wgsl +46 -0
  663. package/dist/libraries/postfx/src/shaders/post-process/bloom-upsample.wgsl +51 -0
  664. package/dist/libraries/postfx/src/shaders/post-process/channel-mixer.wgsl +36 -0
  665. package/dist/libraries/postfx/src/shaders/post-process/chromatic-aberration.wgsl +37 -0
  666. package/dist/libraries/postfx/src/shaders/post-process/dithering.wgsl +64 -0
  667. package/dist/libraries/postfx/src/shaders/post-process/dof.wgsl +131 -0
  668. package/dist/libraries/postfx/src/shaders/post-process/edges.wgsl +45 -0
  669. package/dist/libraries/postfx/src/shaders/post-process/fullscreen-vs.wgsl +15 -0
  670. package/dist/libraries/postfx/src/shaders/post-process/fxaa.wgsl +102 -0
  671. package/dist/libraries/postfx/src/shaders/post-process/gaussian-blur.wgsl +37 -0
  672. package/dist/libraries/postfx/src/shaders/post-process/glow-blur.wgsl +33 -0
  673. package/dist/libraries/postfx/src/shaders/post-process/glow-composite.wgsl +25 -0
  674. package/dist/libraries/postfx/src/shaders/post-process/grain.wgsl +37 -0
  675. package/dist/libraries/postfx/src/shaders/post-process/halftone.wgsl +80 -0
  676. package/dist/libraries/postfx/src/shaders/post-process/highlight-blur.wgsl +33 -0
  677. package/dist/libraries/postfx/src/shaders/post-process/highlight-composite.wgsl +32 -0
  678. package/dist/libraries/postfx/src/shaders/post-process/lens-distortion.wgsl +43 -0
  679. package/dist/libraries/postfx/src/shaders/post-process/lens-flare.wgsl +68 -0
  680. package/dist/libraries/postfx/src/shaders/post-process/lut.wgsl +30 -0
  681. package/dist/libraries/postfx/src/shaders/post-process/motion-blur.wgsl +55 -0
  682. package/dist/libraries/postfx/src/shaders/post-process/occluder-chunk.wgsl +28 -0
  683. package/dist/libraries/postfx/src/shaders/post-process/outline.wgsl +51 -0
  684. package/dist/libraries/postfx/src/shaders/post-process/pixelation.wgsl +47 -0
  685. package/dist/libraries/postfx/src/shaders/post-process/sharpen.wgsl +32 -0
  686. package/dist/libraries/postfx/src/shaders/post-process/sobel.wgsl +26 -0
  687. package/dist/libraries/postfx/src/shaders/post-process/split-tone.wgsl +36 -0
  688. package/dist/libraries/postfx/src/shaders/post-process/ssao-blur.wgsl +38 -0
  689. package/dist/libraries/postfx/src/shaders/post-process/ssao-composite.wgsl +25 -0
  690. package/dist/libraries/postfx/src/shaders/post-process/ssao.wgsl +147 -0
  691. package/dist/libraries/postfx/src/shaders/post-process/ssr.wgsl +155 -0
  692. package/dist/libraries/postfx/src/shaders/post-process/taa.wgsl +98 -0
  693. package/dist/libraries/postfx/src/shaders/post-process/tonemap.wgsl +40 -0
  694. package/dist/libraries/postfx/src/shaders/post-process/watercolor.wgsl +82 -0
  695. package/dist/libraries/postfx/src/shaders/post-process/white-balance.wgsl +41 -0
  696. package/dist/libraries/recast/src/backend.js +124 -0
  697. package/dist/libraries/recast/src/crowd-system.js +310 -0
  698. package/dist/libraries/recast/src/index.js +4 -0
  699. package/dist/libraries/recast/src/library.js +59 -0
  700. package/dist/libraries/recast/src/types.js +4 -0
  701. package/dist/libraries/sand/src/cell.js +32 -0
  702. package/dist/libraries/sand/src/fields.js +27 -0
  703. package/dist/libraries/sand/src/fluid-grid.js +267 -0
  704. package/dist/libraries/sand/src/grid-dims.js +47 -0
  705. package/dist/libraries/sand/src/grid-sim-buffer.js +184 -0
  706. package/dist/libraries/sand/src/index.js +20 -0
  707. package/dist/libraries/sand/src/library.js +67 -0
  708. package/dist/libraries/sand/src/materials.js +437 -0
  709. package/dist/libraries/sand/src/palette.js +87 -0
  710. package/dist/libraries/sand/src/particles.js +163 -0
  711. package/dist/libraries/sand/src/render/sand-grid-pass.js +377 -0
  712. package/dist/libraries/sand/src/rng.js +44 -0
  713. package/dist/libraries/sand/src/rules/builtin-rules.js +125 -0
  714. package/dist/libraries/sand/src/rules/rule-compiler.js +164 -0
  715. package/dist/libraries/sand/src/rules/rule-engine.js +210 -0
  716. package/dist/libraries/sand/src/rules/rule-types.js +27 -0
  717. package/dist/libraries/sand/src/sand-step-pool.js +458 -0
  718. package/dist/libraries/sand/src/sand-step-worker.js +101 -0
  719. package/dist/libraries/sand/src/sand-world.js +3382 -0
  720. package/dist/libraries/stickman/src/index.js +7 -0
  721. package/dist/libraries/stickman/src/library.js +44 -0
  722. package/dist/libraries/stickman/src/proportions.js +40 -0
  723. package/dist/libraries/stickman/src/shader.js +113 -0
  724. package/dist/libraries/stickman/src/skeleton.js +163 -0
  725. package/dist/libraries/stickman/src/stickman-pass.js +210 -0
  726. package/dist/libraries/stickman/src/thick-line.js +120 -0
  727. package/dist/libraries/surface-nets/src/chunked-field.js +5 -0
  728. package/dist/libraries/surface-nets/src/deformation.js +29 -0
  729. package/dist/libraries/surface-nets/src/index.js +15 -0
  730. package/dist/libraries/surface-nets/src/library.js +41 -0
  731. package/dist/libraries/surface-nets/src/lod.js +6 -0
  732. package/dist/libraries/surface-nets/src/sab.js +4 -0
  733. package/dist/libraries/surface-nets/src/streaming-config.js +4 -0
  734. package/dist/libraries/surface-nets/src/streaming-manager.js +9 -0
  735. package/dist/libraries/surface-nets/src/surface-nets.js +361 -0
  736. package/dist/libraries/surface-nets/src/types.js +1 -0
  737. package/dist/libraries/water/src/buoyancy.js +80 -0
  738. package/dist/libraries/water/src/index.js +12 -0
  739. package/dist/libraries/water/src/library.js +65 -0
  740. package/dist/libraries/water/src/shore-damping.js +70 -0
  741. package/dist/libraries/water/src/water-buffer.js +78 -0
  742. package/dist/libraries/water/src/water-chunks.js +5 -0
  743. package/dist/libraries/water/src/water-physics.js +315 -0
  744. package/dist/libraries/water/src/water-renderer.js +736 -0
  745. package/dist/libraries/water/src/water-sab.js +138 -0
  746. package/dist/libraries/water/src/wave-sources.js +45 -0
  747. package/dist/libraries/weather/src/index.js +5 -0
  748. package/dist/libraries/weather/src/library.js +48 -0
  749. package/dist/libraries/weather/src/types.js +29 -0
  750. package/dist/libraries/weather/src/weather-blend.js +108 -0
  751. package/dist/libraries/weather/src/weather-system.js +275 -0
  752. package/dist/libraries/weatherfx/src/cloud-provider.js +5 -0
  753. package/dist/libraries/weatherfx/src/cloud-system.js +294 -0
  754. package/dist/libraries/weatherfx/src/index.js +4 -0
  755. package/dist/libraries/weatherfx/src/library.js +41 -0
  756. package/dist/libraries/weatherfx/src/particle-system.js +350 -0
  757. package/dist/libraries/weatherfx/src/shaders/cloud.wgsl +111 -0
  758. package/dist/libraries/weatherfx/src/shaders/particle-compute.wgsl +187 -0
  759. package/dist/libraries/weatherfx/src/shaders/particle-render.wgsl +95 -0
  760. package/dist/mcp/src/client.js +669 -0
  761. package/dist/mcp/src/engine-context.js +99 -0
  762. package/dist/mcp/src/http-transport.js +423 -0
  763. package/dist/mcp/src/index.js +5 -0
  764. package/dist/mcp/src/prompts/add-entity.js +39 -0
  765. package/dist/mcp/src/prompts/create-scene.js +41 -0
  766. package/dist/mcp/src/prompts/debug-frame.js +36 -0
  767. package/dist/mcp/src/prompts/index.js +10 -0
  768. package/dist/mcp/src/resources/asset-list.js +28 -0
  769. package/dist/mcp/src/resources/checkpoint-list.js +29 -0
  770. package/dist/mcp/src/resources/entity-state.js +45 -0
  771. package/dist/mcp/src/resources/gpu-info.js +90 -0
  772. package/dist/mcp/src/resources/index.js +51 -0
  773. package/dist/mcp/src/resources/performance.js +33 -0
  774. package/dist/mcp/src/resources/scene-tree.js +37 -0
  775. package/dist/mcp/src/server.js +307 -0
  776. package/dist/mcp/src/tools/animation.js +102 -0
  777. package/dist/mcp/src/tools/asset.js +146 -0
  778. package/dist/mcp/src/tools/audio.js +80 -0
  779. package/dist/mcp/src/tools/build.js +128 -0
  780. package/dist/mcp/src/tools/camera.js +157 -0
  781. package/dist/mcp/src/tools/checkpoint.js +90 -0
  782. package/dist/mcp/src/tools/component.js +176 -0
  783. package/dist/mcp/src/tools/debug.js +273 -0
  784. package/dist/mcp/src/tools/entity.js +309 -0
  785. package/dist/mcp/src/tools/inspect.js +192 -0
  786. package/dist/mcp/src/tools/lighting.js +239 -0
  787. package/dist/mcp/src/tools/material.js +225 -0
  788. package/dist/mcp/src/tools/mesh.js +210 -0
  789. package/dist/mcp/src/tools/physics.js +251 -0
  790. package/dist/mcp/src/tools/scene.js +139 -0
  791. package/dist/mcp/src/tools/script.js +114 -0
  792. package/dist/mcp/src/types.js +9 -0
  793. package/dist/mcp/src/undo-redo.js +64 -0
  794. package/dist/modules/camera-controls/src/index.js +116 -0
  795. package/dist/modules/controller-ui/src/index.js +149 -0
  796. package/dist/modules/devtools/src/api.js +317 -0
  797. package/dist/modules/devtools/src/asset-utils.js +102 -0
  798. package/dist/modules/devtools/src/bind-debug-store.js +34 -0
  799. package/dist/modules/devtools/src/blitz/host.js +391 -0
  800. package/dist/modules/devtools/src/blitz/module.js +65 -0
  801. package/dist/modules/devtools/src/blitz/panels/console.js +217 -0
  802. package/dist/modules/devtools/src/blitz/panels/elements.js +79 -0
  803. package/dist/modules/devtools/src/blitz/panels/gpu.js +61 -0
  804. package/dist/modules/devtools/src/blitz/panels/performance.js +113 -0
  805. package/dist/modules/devtools/src/blitz/panels/snapshot.js +141 -0
  806. package/dist/modules/devtools/src/blitz/panels/types.js +55 -0
  807. package/dist/modules/devtools/src/blitz/theme.js +167 -0
  808. package/dist/modules/devtools/src/data-bridge.js +247 -0
  809. package/dist/modules/devtools/src/debug-overlay.js +181 -0
  810. package/dist/modules/devtools/src/debug-raycast.js +296 -0
  811. package/dist/modules/devtools/src/debug-store.js +28 -0
  812. package/dist/modules/devtools/src/debug-view-descriptors.js +24 -0
  813. package/dist/modules/devtools/src/doctor-panel.js +163 -0
  814. package/dist/modules/devtools/src/gizmo-module.js +95 -0
  815. package/dist/modules/devtools/src/graph-model.js +387 -0
  816. package/dist/modules/devtools/src/grid-renderer.js +145 -0
  817. package/dist/modules/devtools/src/height-ruler-renderer.js +189 -0
  818. package/dist/modules/devtools/src/index.js +46 -0
  819. package/dist/modules/devtools/src/init.js +204 -0
  820. package/dist/modules/devtools/src/label-overlay.js +129 -0
  821. package/dist/modules/devtools/src/material-stats-panel.js +171 -0
  822. package/dist/modules/devtools/src/profiling-bridge.js +288 -0
  823. package/dist/modules/devtools/src/profiling-hooks.js +63 -0
  824. package/dist/modules/devtools/src/renderer-adapter.js +61 -0
  825. package/dist/modules/devtools/src/scene-inspector.js +571 -0
  826. package/dist/modules/devtools/src/scene-store.js +212 -0
  827. package/dist/modules/devtools/src/scene-sync.js +92 -0
  828. package/dist/modules/devtools/src/shaders/transform-gizmo.wgsl +38 -0
  829. package/dist/modules/devtools/src/sim-stats-panel.js +250 -0
  830. package/dist/modules/devtools/src/sim-stats-provider.js +73 -0
  831. package/dist/modules/devtools/src/skeleton-renderer.js +326 -0
  832. package/dist/modules/devtools/src/transform-gizmo.js +677 -0
  833. package/dist/modules/devtools/src/types.js +5 -0
  834. package/dist/modules/devtools/src/worker-expose.js +59 -0
  835. package/dist/modules/devtools/src/worker-sync.js +115 -0
  836. package/dist/modules/editor/src/commands/component.js +151 -0
  837. package/dist/modules/editor/src/commands/entity.js +253 -0
  838. package/dist/modules/editor/src/commands/hierarchy.js +79 -0
  839. package/dist/modules/editor/src/commands/index.js +57 -0
  840. package/dist/modules/editor/src/commands/prefab.js +149 -0
  841. package/dist/modules/editor/src/commands/registry.js +246 -0
  842. package/dist/modules/editor/src/commands/scene-io.js +206 -0
  843. package/dist/modules/editor/src/commands/selection.js +71 -0
  844. package/dist/modules/editor/src/commands/transform.js +88 -0
  845. package/dist/modules/editor/src/ddscene.js +189 -0
  846. package/dist/modules/editor/src/document.js +96 -0
  847. package/dist/modules/editor/src/editor-context.js +115 -0
  848. package/dist/modules/editor/src/index.js +11 -0
  849. package/dist/modules/editor/src/mcp.js +91 -0
  850. package/dist/modules/editor/src/module.js +115 -0
  851. package/dist/modules/editor/src/selection.js +60 -0
  852. package/dist/modules/editor/src/shell.js +397 -0
  853. package/dist/modules/editor/src/viewport.js +186 -0
  854. package/dist/modules/html-ui/src/composite.js +116 -0
  855. package/dist/modules/html-ui/src/create-html-ui.js +137 -0
  856. package/dist/modules/html-ui/src/doc-backend.js +518 -0
  857. package/dist/modules/html-ui/src/host.js +819 -0
  858. package/dist/modules/html-ui/src/index.js +5 -0
  859. package/dist/modules/html-ui/src/jsx-dev-runtime.js +9 -0
  860. package/dist/modules/html-ui/src/jsx-runtime.js +121 -0
  861. package/dist/modules/html-ui/src/protocol.js +6 -0
  862. package/dist/modules/html-ui/src/ui-worker.js +10 -0
  863. package/dist/modules/mcp/src/index.js +62 -0
  864. package/dist/modules/movement-2d/src/grid-character.js +345 -0
  865. package/dist/modules/movement-2d/src/index.js +27 -0
  866. package/dist/modules/movement-3d/src/character-motor.js +166 -0
  867. package/dist/modules/movement-3d/src/index.js +27 -0
  868. package/dist/modules/native-osr/src/index.js +12 -0
  869. package/dist/modules/native-osr/src/input-router.js +335 -0
  870. package/dist/modules/native-osr/src/native-osr-manager.js +210 -0
  871. package/dist/modules/native-osr/src/native-texture-source.js +66 -0
  872. package/dist/modules/native-osr/src/types.js +8 -0
  873. package/dist/modules/native-osr/src/world-space-ui-pass.js +313 -0
  874. package/dist/modules/sailing/src/index.js +39 -0
  875. package/dist/modules/terrain/src/index.js +44 -0
  876. package/dist/modules/vitals/src/index.js +25 -0
  877. package/dist/modules/vitals/src/vitals.js +195 -0
  878. package/dist/modules/xr/src/camera-rig.js +119 -0
  879. package/dist/modules/xr/src/debug.js +45 -0
  880. package/dist/modules/xr/src/frame-loop.js +139 -0
  881. package/dist/modules/xr/src/index.js +10 -0
  882. package/dist/modules/xr/src/input.js +164 -0
  883. package/dist/modules/xr/src/layer.js +100 -0
  884. package/dist/modules/xr/src/session.js +133 -0
  885. package/dist/modules/xr/src/sim-module.js +21 -0
  886. package/dist/modules/xr/src/types.js +4 -0
  887. package/dist/modules/xr/src/webxr.d.ts +182 -0
  888. package/dist/modules/xr/src/xr-module.js +134 -0
  889. package/dist/shader-graph/src/chunks.js +340 -0
  890. package/dist/shader-graph/src/compiler.js +639 -0
  891. package/dist/shader-graph/src/compute-compiler.js +384 -0
  892. package/dist/shader-graph/src/compute-graph.js +55 -0
  893. package/dist/shader-graph/src/compute-profiles.js +39 -0
  894. package/dist/shader-graph/src/graph.js +38 -0
  895. package/dist/shader-graph/src/index.js +15 -0
  896. package/dist/shader-graph/src/profiles.js +305 -0
  897. package/dist/shader-graph/src/validator.js +42 -0
  898. package/dist/shader-graph/src/wgsl-binding-validator.js +110 -0
  899. package/dist/shader-graph/src/wgsl-struct-validator.js +222 -0
  900. package/dist/shader-graph/src/wgsl-struct.js +251 -0
  901. package/dist/test/src/index.js +1 -0
  902. package/dist/test/src/vision-test.js +228 -0
  903. package/libraries/asset-browser/src/software-thumbnails.ts +2 -2
  904. package/libraries/audio-kira/src/backend.ts +2 -1
  905. package/libraries/blitz-ui/native/src/shell.rs +35 -1
  906. package/libraries/blitz-ui/native-osr/Cargo.toml +8 -0
  907. package/libraries/blitz-ui/native-osr/src/lib.rs +213 -22
  908. package/libraries/blitz-ui/native-osr/src/mutate.rs +109 -14
  909. package/libraries/blitz-ui/src/native-osr-ffi.ts +71 -8
  910. package/libraries/blitz-ui/src/router.ts +3 -1
  911. package/libraries/blitz-ui/src/ui-blit-pass.ts +1 -1
  912. package/libraries/character/src/character-animator.ts +1 -1
  913. package/libraries/character/src/customization.ts +513 -0
  914. package/libraries/character/src/index.ts +6 -0
  915. package/libraries/character/src/inspectable.ts +111 -0
  916. package/libraries/character/src/loader.ts +38 -13
  917. package/libraries/character/src/locomotion.ts +13 -1
  918. package/libraries/character/src/preview.ts +94 -24
  919. package/libraries/devtools/README.md +16 -18
  920. package/libraries/devtools/src/backend.ts +505 -0
  921. package/libraries/devtools/src/cdp-bridge.ts +8 -8
  922. package/libraries/devtools/src/collectors.ts +41 -37
  923. package/libraries/devtools/src/index.ts +32 -14
  924. package/libraries/devtools/src/native-providers.ts +20 -12
  925. package/libraries/devtools/src/snapshot.ts +77 -0
  926. package/libraries/devtools/src/web/host.ts +11 -12
  927. package/libraries/devtools/src/web/mirror.ts +14 -405
  928. package/libraries/devtools/src/web/server.ts +4 -3
  929. package/libraries/entities/src/model-renderer.ts +96 -23
  930. package/libraries/gamepad/src/library.ts +2 -1
  931. package/libraries/inspectable/src/index.ts +11 -0
  932. package/libraries/inspectable/src/inspectable.ts +277 -0
  933. package/libraries/marching-cubes/src/streaming-manager.ts +4 -4
  934. package/libraries/models/src/bind-unskinned-meshes.ts +131 -0
  935. package/libraries/models/src/index.ts +1 -0
  936. package/libraries/models/src/types.ts +22 -0
  937. package/libraries/persistence/src/autosave-manager.ts +1 -1
  938. package/libraries/persistence/src/binary-record-store.ts +1 -1
  939. package/libraries/persistence/src/file-save-store.ts +4 -4
  940. package/libraries/persistence/src/library.ts +1 -1
  941. package/libraries/persistence/src/opfs-save-store.ts +5 -5
  942. package/libraries/persistence/src/save-worker.ts +13 -14
  943. package/libraries/physics-rapier/src/ffi-lib.ts +2 -1
  944. package/libraries/postfx/src/post-process-stack.ts +1 -1
  945. package/libraries/sand/src/sand-step-pool.ts +5 -0
  946. package/libraries/water/src/water-renderer.ts +1 -1
  947. package/libraries/weatherfx/src/cloud-system.ts +3 -3
  948. package/mcp/README.md +20 -0
  949. package/mcp/src/client.ts +75 -22
  950. package/mcp/src/undo-redo.ts +2 -2
  951. package/modules/devtools/src/blitz/host.ts +430 -0
  952. package/modules/devtools/src/blitz/module.ts +101 -0
  953. package/modules/devtools/src/blitz/panels/console.ts +223 -0
  954. package/modules/devtools/src/blitz/panels/elements.ts +92 -0
  955. package/modules/devtools/src/blitz/panels/gpu.ts +70 -0
  956. package/modules/devtools/src/blitz/panels/performance.ts +120 -0
  957. package/modules/devtools/src/blitz/panels/snapshot.ts +152 -0
  958. package/modules/devtools/src/blitz/panels/types.ts +120 -0
  959. package/modules/devtools/src/blitz/theme.ts +168 -0
  960. package/modules/devtools/src/data-bridge.ts +1 -1
  961. package/modules/devtools/src/index.ts +6 -0
  962. package/modules/devtools/src/profiling-bridge.ts +17 -13
  963. package/modules/devtools/src/profiling-hooks.ts +22 -13
  964. package/modules/devtools/src/scene-inspector.ts +1 -1
  965. package/modules/devtools/src/worker-sync.ts +9 -1
  966. package/modules/editor/src/commands/registry.ts +2 -2
  967. package/modules/editor/src/module.ts +1 -1
  968. package/modules/html-ui/src/composite.ts +1 -1
  969. package/modules/html-ui/src/create-html-ui.ts +21 -9
  970. package/modules/html-ui/src/doc-backend.ts +189 -10
  971. package/modules/html-ui/src/host.ts +354 -40
  972. package/modules/html-ui/src/index.ts +1 -1
  973. package/modules/html-ui/src/jsx-runtime.ts +1 -1
  974. package/modules/html-ui/src/protocol.ts +53 -6
  975. package/modules/mcp/README.md +6 -0
  976. package/modules/mcp/src/index.ts +70 -3
  977. package/modules/movement-3d/src/character-motor.ts +83 -10
  978. package/package.json +838 -165
  979. package/shader-graph/README.md +25 -0
  980. package/test/README.md +16 -0
  981. package/libraries/blitz-ui/native-osr-spike.ts +0 -70
  982. package/libraries/devtools/native/Cargo.toml +0 -12
  983. package/libraries/devtools/native/src/lib.rs +0 -1646
  984. package/libraries/devtools/native/src/panels/console.rs +0 -338
  985. package/libraries/devtools/native/src/panels/dom_tree.rs +0 -47
  986. package/libraries/devtools/native/src/panels/generic.rs +0 -317
  987. package/libraries/devtools/native/src/panels/gpu.rs +0 -107
  988. package/libraries/devtools/native/src/panels/input.rs +0 -88
  989. package/libraries/devtools/native/src/panels/mod.rs +0 -154
  990. package/libraries/devtools/native/src/panels/perf_metrics.rs +0 -91
  991. package/libraries/devtools/native/src/panels/perf_recorder.rs +0 -158
  992. package/libraries/devtools/native/src/panels/scene.rs +0 -72
  993. package/libraries/devtools/native/src/state.rs +0 -394
  994. package/libraries/devtools/src/egui-ffi.ts +0 -804
  995. package/libraries/devtools/src/egui-renderer.ts +0 -407
  996. package/libraries/devtools/src/host.ts +0 -363
  997. package/libraries/devtools/src/mirror.ts +0 -794
  998. package/libraries/models/test-fixtures/fbx/LICENSE-notice.txt +0 -24
  999. package/libraries/models/test-fixtures/fbx/README.md +0 -46
  1000. package/libraries/models/test-fixtures/fbx/m01_cube_phong.fbx +0 -0
  1001. package/libraries/models/test-fixtures/fbx/m02_geo_ngons.fbx +0 -0
  1002. package/libraries/models/test-fixtures/fbx/m03_normals.fbx +0 -0
  1003. package/libraries/models/test-fixtures/fbx/m04_material_properties.fbx +0 -0
  1004. package/libraries/models/test-fixtures/fbx/m05_external_diffuse.png +0 -0
  1005. package/libraries/models/test-fixtures/fbx/m05_textures.fbx +0 -0
  1006. package/libraries/models/test-fixtures/fbx/m06_uv_transform.fbx +0 -0
  1007. package/libraries/models/test-fixtures/fbx/m07_multimaterial.fbx +0 -0
  1008. package/libraries/models/test-fixtures/fbx/m08_transforms.fbx +0 -0
  1009. package/libraries/models/test-fixtures/fbx/m09_skinning.fbx +0 -0
  1010. package/libraries/models/test-fixtures/fbx/m10_morph.fbx +0 -0
  1011. package/libraries/models/test-fixtures/fbx/m11_node_anim.fbx +0 -0
  1012. package/libraries/models/test-fixtures/fbx/m12_skeletal_anim.fbx +0 -0
  1013. package/libraries/models/test-fixtures/fbx/m13_morph_anim.fbx +0 -0
  1014. package/libraries/models/test-fixtures/fbx/m14_multiclip.fbx +0 -0
  1015. package/libraries/models/test-fixtures/fbx/m15_camera_lights.fbx +0 -0
  1016. package/libraries/models/test-fixtures/fbx/m16_axis_yup.fbx +0 -0
  1017. package/libraries/models/test-fixtures/fbx/m16_axis_zup.fbx +0 -0
  1018. package/libraries/models/test-fixtures/fbx/m16_units_254.fbx +0 -0
  1019. package/libraries/physics-native/src/ffi-spike-worker.ts +0 -71
  1020. package/libraries/physics-rapier/bench/ffi-bench.ts +0 -79
  1021. package/libraries/physics-rapier/bench/wasm-baseline.ts +0 -90
@@ -187,7 +187,7 @@ export class ModuleHost implements ModuleContext {
187
187
  this.active.set(plugin.name, active);
188
188
  this.currentModuleName = plugin.name;
189
189
  try {
190
- plugin.register(this);
190
+ plugin.register(this.makeContext(plugin.name, active));
191
191
  } catch (err) {
192
192
  // Roll back partial activation: the module must not stay "active"
193
193
  // with half-wired resources. Clean up anything it provided or
@@ -200,7 +200,7 @@ export class ModuleHost implements ModuleContext {
200
200
  try {
201
201
  active.disposeFns[i]();
202
202
  } catch (disposeErr) {
203
- log.error("ModuleHost", `Dispose error rolling back plugin "${plugin.name}": ${disposeErr}`);
203
+ log.error("module-host", `Dispose error rolling back plugin "${plugin.name}": ${disposeErr}`);
204
204
  }
205
205
  }
206
206
  // Remove systems the module registered before throwing.
@@ -238,7 +238,7 @@ export class ModuleHost implements ModuleContext {
238
238
  try {
239
239
  active.disposeFns[i]();
240
240
  } catch (err) {
241
- log.error("ModuleHost", `Dispose error in plugin "${name}": ${err}`);
241
+ log.error("module-host", `Dispose error in plugin "${name}": ${err}`);
242
242
  }
243
243
  }
244
244
  // Remove the module's systems from the world schedule — otherwise they
@@ -309,7 +309,7 @@ export class ModuleHost implements ModuleContext {
309
309
  try {
310
310
  this.unattributedDisposeFns[i]();
311
311
  } catch (err) {
312
- log.error("ModuleHost", `Unattributed dispose error: ${err}`);
312
+ log.error("module-host", `Unattributed dispose error: ${err}`);
313
313
  }
314
314
  }
315
315
  this.unattributedDisposeFns.length = 0;
@@ -321,17 +321,21 @@ export class ModuleHost implements ModuleContext {
321
321
 
322
322
  registerSystem(stage: Stage, system: SystemFn): void {
323
323
  if (!this.currentModuleName) {
324
- log.warn("ModuleHost", "registerSystem called outside a module register() lifecycle — the system will not be attributed to any module");
324
+ log.warn("module-host", "registerSystem called outside a module register() lifecycle — the system will not be attributed to any module");
325
325
  }
326
+ this.registerSystemFor(this.currentModuleName || "unattributed", stage, system);
327
+ }
328
+
329
+ private registerSystemFor(owner: string, stage: Stage, system: SystemFn): void {
326
330
  this.systemCounter++;
327
- const name = `module:${this.currentModuleName || "unattributed"}:${this.systemCounter}`;
331
+ const name = `module:${owner}:${this.systemCounter}`;
328
332
  this.world.schedule.add({
329
333
  name,
330
334
  stage,
331
335
  fn: system,
332
336
  queries: [],
333
337
  });
334
- const active = this.active.get(this.currentModuleName);
338
+ const active = this.active.get(owner);
335
339
  if (active) {
336
340
  active.systemNames.push(name);
337
341
  } else {
@@ -341,10 +345,14 @@ export class ModuleHost implements ModuleContext {
341
345
 
342
346
  registerSystemObject(system: System): void {
343
347
  if (!this.currentModuleName) {
344
- log.warn("ModuleHost", `registerSystemObject("${system.name}") called outside a module register() lifecycle — the system will not be attributed to any module`);
348
+ log.warn("module-host", `registerSystemObject("${system.name}") called outside a module register() lifecycle — the system will not be attributed to any module`);
345
349
  }
350
+ this.registerSystemObjectFor(this.currentModuleName, system);
351
+ }
352
+
353
+ private registerSystemObjectFor(owner: string, system: System): void {
346
354
  this.world.schedule.add(system);
347
- const active = this.active.get(this.currentModuleName);
355
+ const active = this.active.get(owner);
348
356
  if (active) {
349
357
  active.systemNames.push(system.name);
350
358
  } else {
@@ -354,10 +362,14 @@ export class ModuleHost implements ModuleContext {
354
362
 
355
363
  allocateSABChannel(name: string, size: number): SABChannel {
356
364
  if (!this.currentModuleName) {
357
- log.warn("ModuleHost", `allocateSABChannel("${name}") called outside a module register() lifecycle — the channel is untracked and won't be cleaned up on unload`);
365
+ log.warn("module-host", `allocateSABChannel("${name}") called outside a module register() lifecycle — the channel is untracked and won't be cleaned up on unload`);
358
366
  }
367
+ return this.allocateSABChannelFor(this.currentModuleName, name, size);
368
+ }
369
+
370
+ private allocateSABChannelFor(owner: string, name: string, size: number): SABChannel {
359
371
  const buffer = new SharedArrayBuffer(size);
360
- const active = this.active.get(this.currentModuleName);
372
+ const active = this.active.get(owner);
361
373
  if (active) {
362
374
  active.sabChannels.set(name, buffer);
363
375
  }
@@ -366,14 +378,18 @@ export class ModuleHost implements ModuleContext {
366
378
 
367
379
  provide<T>(token: ResourceToken<T>, value: T): void {
368
380
  if (!this.currentModuleName) {
369
- log.warn("ModuleHost", `provide("${token.key}") called outside a module register() lifecycle — the resource won't be cleaned up on unload`);
381
+ log.warn("module-host", `provide("${token.key}") called outside a module register() lifecycle — the resource won't be cleaned up on unload`);
370
382
  }
383
+ this.provideFor(this.currentModuleName, token, value);
384
+ }
385
+
386
+ private provideFor<T>(owner: string, token: ResourceToken<T>, value: T): void {
371
387
  if (isStrict()) {
372
- assertNoDuplicate(this.providers, token as ResourceToken<unknown>, this.currentModuleName);
388
+ assertNoDuplicate(this.providers, token as ResourceToken<unknown>, owner);
373
389
  }
374
390
  this.resources.set(token.key, { token: token as ResourceToken<unknown>, value });
375
- this.providers.set(token.key, this.currentModuleName);
376
- const active = this.active.get(this.currentModuleName);
391
+ this.providers.set(token.key, owner);
392
+ const active = this.active.get(owner);
377
393
  if (active) {
378
394
  active.providedKeys.add(token.key);
379
395
  }
@@ -393,11 +409,15 @@ export class ModuleHost implements ModuleContext {
393
409
  }
394
410
 
395
411
  inject<T>(token: ResourceToken<T>): T {
412
+ return this.injectFor(this.currentModuleName, token);
413
+ }
414
+
415
+ private injectFor<T>(owner: string, token: ResourceToken<T>): T {
396
416
  const entry = this.resources.get(token.key);
397
417
  if (!entry) {
398
418
  throw new Error(
399
- `Module "${this.currentModuleName}" injects "${token.key}" which is not provided. ` +
400
- `Add a plugin that provides it, or use injectOptional() for safe reads.`,
419
+ `Module "${owner}" injects "${token.key}" which is not provided. ` +
420
+ `Add a module that provides it, or use injectOptional() for safe reads.`,
401
421
  );
402
422
  }
403
423
  return entry.value as T;
@@ -423,7 +443,7 @@ export class ModuleHost implements ModuleContext {
423
443
  } else {
424
444
  // Don't drop the callback silently — run it at disposeAll() so
425
445
  // resources registered outside a lifecycle still get cleaned up.
426
- log.warn("ModuleHost", "onDispose called outside a module register() lifecycle — the callback will run at disposeAll() instead of being attributed to a module");
446
+ log.warn("module-host", "onDispose called outside a module register() lifecycle — the callback will run at disposeAll() instead of being attributed to a module");
427
447
  this.unattributedDisposeFns.push(fn);
428
448
  }
429
449
  }
@@ -438,6 +458,33 @@ export class ModuleHost implements ModuleContext {
438
458
  setCurrentPlugin(name: string): void {
439
459
  this.currentModuleName = name;
440
460
  }
461
+
462
+ /**
463
+ * Per-module context facade handed to `register()`. Lifecycle calls are
464
+ * bound to the owning module at creation time — a module that retains its
465
+ * ctx and calls it later (async callback, or during another module's
466
+ * register()) stays correctly attributed instead of leaking onto whatever
467
+ * module happens to be activating. Mirrors RendererModuleHost.makeContext.
468
+ */
469
+ private makeContext(name: string, active: ActiveModule): ModuleContext {
470
+ const devtoolsApi = () => this.devtools;
471
+ return {
472
+ // Lazy — the DevTools API may be injected after register() runs;
473
+ // resolving per-access keeps late wiring (setDevToolsAPI) working.
474
+ get devtools() { return devtoolsApi(); },
475
+ registerComponent: (n, s) => this.registerComponent(n, s),
476
+ registerSystem: (stage, system) => this.registerSystemFor(name, stage, system),
477
+ registerSystemObject: (system) => this.registerSystemObjectFor(name, system),
478
+ allocateSABChannel: (n, size) => this.allocateSABChannelFor(name, n, size),
479
+ provide: (token, value) => this.provideFor(name, token, value),
480
+ inject: (token) => this.injectFor(name, token),
481
+ injectOptional: (token) => this.injectOptional(token),
482
+ registerMigration: (fromVersion, fn) => this.registerMigration(fromVersion, fn),
483
+ onDispose: (fn) => {
484
+ active.disposeFns.push(fn);
485
+ },
486
+ };
487
+ }
441
488
  }
442
489
 
443
490
  // No-op DevTools API stub — used when setDevToolsAPI() hasn't been called.
@@ -16,6 +16,7 @@ export type {
16
16
  PointerHandler, RendererInputBus,
17
17
  RendererModule,
18
18
  RendererModuleContext, RenderPassHook, ResizeHook,
19
+ ScreenUiCompositor,
19
20
  WheelHandler
20
21
  } from "./renderer-module";
21
22
  export { TsModuleLoader } from "./ts-loader";
@@ -66,24 +66,30 @@ export interface ModuleDevToolsAPI {
66
66
  }
67
67
 
68
68
  export interface ModuleContext {
69
+ /**
70
+ * Register a component name and return its ComponentId.
71
+ * NOTE: `schema` is currently unused — the id is interned by name only
72
+ * (no defaults/definition are registered; use `component()` from the ecs
73
+ * barrel for a full definition). Reserved for future schema validation.
74
+ */
69
75
  registerComponent<T>(name: string, schema: T): ComponentId;
70
76
  registerSystem(stage: Stage, system: SystemFn): void;
71
77
  /** Register a pre-built System object (with queries) to the world schedule. */
72
78
  registerSystemObject(system: System): void;
73
79
  allocateSABChannel(name: string, size: number): SABChannel;
74
80
  /**
75
- * Provide a typed resource to the plugin graph. Other plugins can
81
+ * Provide a typed resource to the module graph. Other modules can
76
82
  * `inject()` it by the same token. In DOWNDRAFT_STRICT mode, duplicate
77
83
  * provides of the same token throw a DiagnosticError.
78
84
  */
79
85
  provide<T>(token: ResourceToken<T>, value: T): void;
80
86
  /**
81
- * Read a typed resource provided by another plugin. Throws if the token
87
+ * Read a typed resource provided by another module. Throws if the token
82
88
  * has no provider (use `injectOptional` for safe reads).
83
89
  */
84
90
  inject<T>(token: ResourceToken<T>): T;
85
91
  /**
86
- * Read a typed resource, returning `undefined` if no plugin provides it.
92
+ * Read a typed resource, returning `undefined` if no module provides it.
87
93
  */
88
94
  injectOptional<T>(token: ResourceToken<T>): T | undefined;
89
95
  registerMigration(fromVersion: number, fn: (data: unknown) => unknown): void;
@@ -100,9 +106,9 @@ export interface Module {
100
106
  name: string;
101
107
  version: string;
102
108
  dependencies?: string[];
103
- /** Typed tokens this plugin provides to the graph. Validated at activation. */
109
+ /** Typed tokens this module provides to the graph. Validated at activation. */
104
110
  provides?: ResourceToken<unknown>[];
105
- /** Typed tokens this plugin requires from the graph. Validated at activation. */
111
+ /** Typed tokens this module requires from the graph. Validated at activation. */
106
112
  requires?: ResourceToken<unknown>[];
107
113
  register(ctx: ModuleContext): void;
108
114
  }
@@ -125,6 +125,9 @@ export interface ScreenUiCompositor {
125
125
  render(pass: GPURenderPassEncoder, surfaceWidth: number, surfaceHeight: number): void;
126
126
  /** When false for all compositors, no UI pass is opened. */
127
127
  hasContent(): boolean;
128
+ /** Draw order — higher renders later (on top). Default 0; the devtools
129
+ * dock uses a large value so it overlays fullscreen game UI panels. */
130
+ order?: number;
128
131
  }
129
132
 
130
133
  // ── Renderer plugin context ──
@@ -164,6 +167,18 @@ export interface RendererModuleContext {
164
167
  */
165
168
  registerUiCompositor?(c: ScreenUiCompositor): () => void;
166
169
 
170
+ /**
171
+ * The native host's worker-pass mailbox — workers finish command buffers
172
+ * on a shared-device view and postPass() them into named slots; the
173
+ * renderer drains each slot into the matching submit batch every frame
174
+ * (refs arriving between drains land in the next frame — passes are
175
+ * stale-tolerant, never rendezvous'd). Null off native / before the host
176
+ * boots. Well-known slots: "preSubmit" (joins the frame batch submitted
177
+ * after viewports+postfx), "preUi" (submitted ahead of the UI-composite
178
+ * pass so worker output is visible to the compositor the same frame).
179
+ */
180
+ getGpuPassMailbox(): import("../platform/runtime").GpuPassMailboxLike | null;
181
+
167
182
  // ── Frame / resize hooks ──
168
183
  onFrame(phase: FramePhase, fn: FrameHook): () => void;
169
184
  onResize(fn: ResizeHook): () => void;
@@ -241,7 +241,7 @@ export class SafetyLayer {
241
241
  throw new Error(`[Physics Safety] ${msg}`);
242
242
  } else {
243
243
  // Shipped: log and continue (never crash)
244
- log.warn("Physics Safety", msg);
244
+ log.warn("physics-safety", msg);
245
245
  }
246
246
  }
247
247
  }
@@ -111,9 +111,14 @@ if (typeof (globalThis as any).Bun !== "undefined" && typeof (globalThis as any)
111
111
  // namespace gets cached as a package-looking specifier: re-resolution
112
112
  // wraps it in another "dd-css:<dir>" layer per ancestor walked, looping
113
113
  // forever at "/" until ENAMETOOLONG.
114
- const stub = resolve(import.meta.dir, "css-stub.ts");
115
- // NOTE: the stub is a .ts file specifically so the baked specifier never
114
+ // Prefer the .ts sibling in source layouts; the transpiled npm dist
115
+ // ships css-stub.js. Both are safe baked specifiers — neither
116
116
  // re-matches this /\.css$/ filter.
117
+ const { existsSync } = require("node:fs");
118
+ const tsStub = resolve(import.meta.dir, "css-stub.ts");
119
+ const stub = existsSync(tsStub)
120
+ ? tsStub
121
+ : resolve(import.meta.dir, "css-stub.js");
117
122
  build.onResolve({ filter: /\.css$/ }, () => ({ path: stub }));
118
123
  // Transpile-cache entries written by older versions still carry
119
124
  // "dd-css:<...>" specifiers — Bun routes those straight to the namespace
@@ -72,10 +72,13 @@ export function createGlob(callerDir: string): (pattern: string, options?: any)
72
72
 
73
73
  allFiles.forEach((file) => {
74
74
  const relPath = relative(fsCallerDir, file).replace(/\\/g, "/");
75
- const prefixedPath = relPath.startsWith("..") ? relPath : "./" + relPath;
76
- if (matchRegex.test(relPath) || matchRegex.test(prefixedPath)) {
75
+ // Vite-style keys: `./x` for same-dir/child paths, `../x` for parent
76
+ // traversal — NOT `./../x`. Callers match on these keys (startsWith
77
+ // on the pattern's literal prefix, endsWith on subpaths).
78
+ const key = relPath.startsWith("..") ? relPath : "./" + relPath;
79
+ if (matchRegex.test(relPath) || matchRegex.test(key)) {
77
80
  // For ?url queries, return the file:// URL
78
- result["./" + relPath] = pathToFileURL(file).href;
81
+ result[key] = pathToFileURL(file).href;
79
82
  }
80
83
  });
81
84
  return result;
@@ -95,11 +98,15 @@ export function createGlob(callerDir: string): (pattern: string, options?: any)
95
98
  // converged on:
96
99
  // 1. `__nativeGlob` — installed by the native host (platform-native's
97
100
  // installAssetGlob); caller-relative via the baseDir argument.
98
- // 2. `import.meta.glob` — present only under a Vite transform that injected
99
- // it; a plain property read is undefined on native, so this is a safe
100
- // second probe.
101
+ // 2. `import.meta.glob` — a real implementation only ever exists when a
102
+ // Vite transform rewrote a LITERAL `import.meta.glob(` call at the call
103
+ // site; a passed-around meta object can't carry it. On Vite's
104
+ // ModuleRunner the meta object DOES expose a `glob` property — but it
105
+ // is a stub that throws ("statically replaced during file
106
+ // transformation"), so the probe must tolerate the throw.
101
107
  // 3. `createGlob(callerDir)` — filesystem glob relative to the caller's
102
- // module dir (packaged binaries, bare runtimes without the host global).
108
+ // module dir (packaged binaries, bare runtimes without the host global,
109
+ // and the dev ModuleRunner where `meta.glob` is the throwing stub).
103
110
  //
104
111
  // Usage:
105
112
  // const models = globAssets("../assets/models/*.glb", import.meta);
@@ -118,7 +125,9 @@ export function globAssets(
118
125
  return (native as (p: string, o?: unknown, baseDir?: string) => Record<string, string>)(pattern, opts, callerDir);
119
126
  }
120
127
  if (typeof meta.glob === "function") {
121
- return (meta.glob as (p: string, o?: unknown) => Record<string, string>)(pattern, opts);
128
+ try {
129
+ return (meta.glob as (p: string, o?: unknown) => Record<string, string>)(pattern, opts);
130
+ } catch { /* ModuleRunner stub — fall through to the filesystem glob */ }
122
131
  }
123
132
  return createGlob(callerDir)(pattern, opts);
124
133
  }
@@ -0,0 +1,27 @@
1
+ // ============================================================================
2
+ // pkg-root.ts — package-root resolution for module-relative paths
3
+ //
4
+ // Modules that resolve package-relative paths (native crate dirs, staged
5
+ // asset roots) must anchor at the package root rather than hardcoding a
6
+ // ".." segment count: the transpiled npm dist/ nests modules one level
7
+ // deeper than src/, so source-relative math escapes into dist/.
8
+ // ============================================================================
9
+
10
+ import { existsSync } from "node:fs";
11
+ import { dirname, join } from "node:path";
12
+
13
+ /**
14
+ * Nearest ancestor directory containing a package.json, walking up from
15
+ * `fromDir`. Layout-agnostic — a module under src/ and its transpiled copy
16
+ * under dist/src/ resolve to the same package root. Falls back to
17
+ * `fromDir` when no package.json ancestor exists (bare file imports).
18
+ */
19
+ export function findPackageRoot(fromDir: string): string {
20
+ let dir = fromDir;
21
+ for (;;) {
22
+ if (existsSync(join(dir, "package.json"))) return dir;
23
+ const parent = dirname(dir);
24
+ if (parent === dir) return fromDir;
25
+ dir = parent;
26
+ }
27
+ }
@@ -113,12 +113,41 @@ export function getHostCapabilities(): HostCapabilities {
113
113
  return DOM_HOST_CAPABILITIES;
114
114
  }
115
115
 
116
+ /** Structural view of the native host's per-device shared-GPU broker —
117
+ * typed here because platform-native is an optional peer. payload() yields
118
+ * the {gpu, cells} attach payload a worker needs for attachSharedDevice(). */
119
+ export interface GpuShareBrokerLike {
120
+ payload(): { gpu: unknown; cells: SharedArrayBuffer };
121
+ attached(): number;
122
+ isAlive(): boolean;
123
+ markLost(): void;
124
+ retire(timeoutMs?: number): Promise<boolean>;
125
+ }
126
+
127
+ /** Structural view of the native host's worker-pass mailbox — the renderer
128
+ * drains named slots into its submit batches; producers postPass() into
129
+ * them. See gpu/pass-channel.ts for slot conventions. */
130
+ export interface GpuPassMailboxLike {
131
+ /** Listen for gpuPass messages on a worker's message stream. */
132
+ watch(worker: { addEventListener(type: "message", fn: (e: { data: unknown }) => void): void; removeEventListener(type: "message", fn: (e: { data: unknown }) => void): void }): () => void;
133
+ /** Feed a raw message — for workers whose stream is owned elsewhere. */
134
+ feed(msg: unknown): boolean;
135
+ /** Import all pending refs for `slot` into owning command buffers —
136
+ * renderer-only; call right before the submit they should join. */
137
+ drain(slot: string): GPUCommandBuffer[];
138
+ }
139
+
116
140
  /** The subset of the live native host object games legitimately reach for —
117
141
  * primarily its GPU handles until the renderer gets an injected device
118
142
  * (Phase 2 of the native re-architecture). */
119
143
  export interface NativeHostHandle {
120
144
  device?: GPUDevice;
121
145
  adapter?: GPUAdapter;
146
+ /** Per-device shared-GPU broker (native only) — workers attach through
147
+ * payload() so one liveness cells set reaches every consumer. */
148
+ gpuShare?: GpuShareBrokerLike;
149
+ /** Mailbox for worker-produced command buffers drained by the renderer. */
150
+ passMailbox?: GpuPassMailboxLike;
122
151
  [key: string]: unknown;
123
152
  }
124
153
 
@@ -66,7 +66,7 @@ export async function discoverPlugins(
66
66
  const r = host.discover(manifest, baseUrl);
67
67
  if (!r.ok) {
68
68
  rejected.push({ id: manifest.id, errors: r.errors });
69
- log.warn("PluginHost", `Rejected manifest "${manifest.id}": ${r.errors.join("; ")}`);
69
+ log.warn("plugin-host", `Rejected manifest "${manifest.id}": ${r.errors.join("; ")}`);
70
70
  }
71
71
  });
72
72
  await host.loadAll();
@@ -71,16 +71,18 @@ export function createAssetLoader(registry: AssetRegistry): ExtensionLoader {
71
71
  const id = a.id;
72
72
  switch (a.kind) {
73
73
  case "mesh":
74
- await registry.registerMesh(id, a.path, manifestId, a as Record<string, unknown>);
74
+ // Pathless mesh = procedural primitive prop (shape/physics meta
75
+ // only). Pass "" so the registry registers an empty URL.
76
+ await registry.registerMesh(id, a.path ?? "", manifestId, a as Record<string, unknown>);
75
77
  return () => { registry.unregisterMesh(id); };
76
78
  case "texture":
77
- await registry.registerTexture(id, a.path, manifestId, a as Record<string, unknown>);
79
+ await registry.registerTexture(id, a.path ?? "", manifestId, a as Record<string, unknown>);
78
80
  return () => { registry.unregisterTexture(id); };
79
81
  case "pbr-material":
80
- await registry.registerPBRMaterial(id, a.path, manifestId, a);
82
+ await registry.registerPBRMaterial(id, a.path ?? "", manifestId, a);
81
83
  return () => { registry.unregisterPBRMaterial(id); };
82
84
  case "texture-pipeline":
83
- await registry.registerTexturePipeline(id, a.path, manifestId, a);
85
+ await registry.registerTexturePipeline(id, a.path ?? "", manifestId, a);
84
86
  return () => { registry.unregisterTexturePipeline(id); };
85
87
  default:
86
88
  throw new Error(`Unknown asset kind: ${(a as any).kind}`);
@@ -175,7 +175,7 @@ export class PluginHost {
175
175
  */
176
176
  publishEvent(event: string, data: unknown): void {
177
177
  if (this.opts.eventCatalog && !(event in this.opts.eventCatalog)) {
178
- log.warn("PluginHost", `publishEvent("${event}") — not in the game's event catalog; delivering anyway`);
178
+ log.warn("plugin-host", `publishEvent("${event}") — not in the game's event catalog; delivering anyway`);
179
179
  }
180
180
  this.eventBus.publish(event, data);
181
181
  }
@@ -190,7 +190,7 @@ export class PluginHost {
190
190
  try {
191
191
  drain(dt, elapsedTime);
192
192
  } catch (e) {
193
- log.error("PluginHost", `Plugin tick error: ${(e as Error).message}`);
193
+ log.error("plugin-host", `Plugin tick error: ${(e as Error).message}`);
194
194
  }
195
195
  }
196
196
  for (const loader of this.loaders.values()) {
@@ -252,7 +252,7 @@ export class PluginHost {
252
252
  try {
253
253
  order = this.registry.resolveOrder();
254
254
  } catch (e) {
255
- log.error("PluginHost", `Dependency resolution failed: ${(e as Error).message}`);
255
+ log.error("plugin-host", `Dependency resolution failed: ${(e as Error).message}`);
256
256
  // Mark all discovered as errored.
257
257
  for (const [id, d] of this.discovered.entries()) {
258
258
  this.active.set(id, {
@@ -286,7 +286,7 @@ export class PluginHost {
286
286
  error: "a dependency failed to load",
287
287
  source: d.source,
288
288
  });
289
- log.warn("PluginHost", `Skipping "${id}" — dependency failed`);
289
+ log.warn("plugin-host", `Skipping "${id}" — dependency failed`);
290
290
  continue;
291
291
  }
292
292
  await this.loadOne(id);
@@ -313,7 +313,7 @@ export class PluginHost {
313
313
  error: `no loader registered for format "${logicFormat}"`,
314
314
  source: d.source,
315
315
  });
316
- log.error("PluginHost", `No loader for "${id}" (format ${logicFormat})`);
316
+ log.error("plugin-host", `No loader for "${id}" (format ${logicFormat})`);
317
317
  return;
318
318
  }
319
319
  const granted = resolvePermissions(
@@ -346,7 +346,7 @@ export class PluginHost {
346
346
  for (let _i = 0, _it = exts, _n = _it.length; _i < _n; _i++) { const ext = _it[_i];
347
347
  const extLoader = this.extensionLoaders.get(ext.bucket);
348
348
  if (!extLoader) {
349
- log.warn("PluginHost", `No extension loader for bucket "${ext.bucket}" (mod "${id}") — skipping`);
349
+ log.warn("plugin-host", `No extension loader for bucket "${ext.bucket}" (mod "${id}") — skipping`);
350
350
  continue;
351
351
  }
352
352
  try {
@@ -356,17 +356,17 @@ export class PluginHost {
356
356
  a.disposeFns.push(dispose);
357
357
  }
358
358
  } catch (e) {
359
- log.error("PluginHost", `Extension load error in "${id}" (${ext.bucket}): ${(e as Error).message}`);
359
+ log.error("plugin-host", `Extension load error in "${id}" (${ext.bucket}): ${(e as Error).message}`);
360
360
  }
361
361
  }
362
362
  const a = this.active.get(id)!;
363
363
  a.status = "active";
364
- log.info("PluginHost", `Loaded mod "${id}" (${logicFormat ?? "data"}/${m.tier})`);
364
+ log.info("plugin-host", `Loaded mod "${id}" (${logicFormat ?? "data"}/${m.tier})`);
365
365
  } catch (e) {
366
366
  const a = this.active.get(id)!;
367
367
  a.status = "error";
368
368
  a.error = (e as Error).message;
369
- log.error("PluginHost", `Failed to load mod "${id}": ${(e as Error).message}`);
369
+ log.error("plugin-host", `Failed to load mod "${id}": ${(e as Error).message}`);
370
370
  }
371
371
  }
372
372
 
@@ -442,7 +442,7 @@ export class PluginHost {
442
442
  const catalog = this.opts.eventCatalog;
443
443
  const check = (event: string, op: string) => {
444
444
  if (catalog && !(event in catalog)) {
445
- log.warn("PluginHost", `plugin "${pluginId}" ${op} unknown event "${event}" (not in catalog)`);
445
+ log.warn("plugin-host", `plugin "${pluginId}" ${op} unknown event "${event}" (not in catalog)`);
446
446
  }
447
447
  };
448
448
  return {
@@ -466,7 +466,7 @@ export class PluginHost {
466
466
  try {
467
467
  a.disposeFns[i]();
468
468
  } catch (e) {
469
- log.error("PluginHost", `Dispose error in plugin "${id}": ${(e as Error).message}`);
469
+ log.error("plugin-host", `Dispose error in plugin "${id}": ${(e as Error).message}`);
470
470
  }
471
471
  }
472
472
  this.active.delete(id);
@@ -488,7 +488,7 @@ export class PluginHost {
488
488
  async reload(id: string): Promise<void> {
489
489
  const d = this.discovered.get(id);
490
490
  if (!d) {
491
- log.warn("PluginHost", `reload: "${id}" not discovered`);
491
+ log.warn("plugin-host", `reload: "${id}" not discovered`);
492
492
  return;
493
493
  }
494
494
  this.unload(id);
@@ -649,7 +649,7 @@ function fmt(msg: string, args: unknown[]): string {
649
649
  }
650
650
 
651
651
  function makeLogger(_pluginId: string): PluginLogger {
652
- const prefix = `[plugin:${_pluginId}]`;
652
+ const prefix = `plugin:${_pluginId}`;
653
653
  return {
654
654
  info: (msg, ...args) => log.info(prefix, fmt(msg, args)),
655
655
  warn: (msg, ...args) => log.warn(prefix, fmt(msg, args)),
@@ -67,7 +67,7 @@ export class AssetPluginLoader implements PluginLoader {
67
67
  await am.load(path);
68
68
  loaded.push(path);
69
69
  } catch (e) {
70
- log.error("AssetPluginLoader", `Failed to load texture "${path}" for plugin "${manifest.id}": ${(e as Error).message}`);
70
+ log.error("asset-plugin-loader", `Failed to load texture "${path}" for plugin "${manifest.id}": ${(e as Error).message}`);
71
71
  }
72
72
  }
73
73
  for (let _i = 0, _it = assets.audio ?? [], _n = _it.length; _i < _n; _i++) { const path = _it[_i];
@@ -75,7 +75,7 @@ export class AssetPluginLoader implements PluginLoader {
75
75
  await am.load(path);
76
76
  loaded.push(path);
77
77
  } catch (e) {
78
- log.error("AssetPluginLoader", `Failed to load audio "${path}" for plugin "${manifest.id}": ${(e as Error).message}`);
78
+ log.error("asset-plugin-loader", `Failed to load audio "${path}" for plugin "${manifest.id}": ${(e as Error).message}`);
79
79
  }
80
80
  }
81
81
  for (let _i = 0, _it = assets.meshes ?? [], _n = _it.length; _i < _n; _i++) { const path = _it[_i];
@@ -83,7 +83,7 @@ export class AssetPluginLoader implements PluginLoader {
83
83
  await am.load(path);
84
84
  loaded.push(path);
85
85
  } catch (e) {
86
- log.error("AssetPluginLoader", `Failed to load mesh "${path}" for plugin "${manifest.id}": ${(e as Error).message}`);
86
+ log.error("asset-plugin-loader", `Failed to load mesh "${path}" for plugin "${manifest.id}": ${(e as Error).message}`);
87
87
  }
88
88
  }
89
89
  // Data files (JSON etc.) — loaded as raw text via the generic loader.
@@ -92,12 +92,12 @@ export class AssetPluginLoader implements PluginLoader {
92
92
  await am.load(path);
93
93
  loaded.push(path);
94
94
  } catch (e) {
95
- log.error("AssetPluginLoader", `Failed to load data "${path}" for plugin "${manifest.id}": ${(e as Error).message}`);
95
+ log.error("asset-plugin-loader", `Failed to load data "${path}" for plugin "${manifest.id}": ${(e as Error).message}`);
96
96
  }
97
97
  }
98
98
 
99
99
  this.loadedUris.set(manifest.id, loaded);
100
- log.info("AssetPluginLoader", `Loaded ${loaded.length} asset(s) for plugin "${manifest.id}" from ${base}`);
100
+ log.info("asset-plugin-loader", `Loaded ${loaded.length} asset(s) for plugin "${manifest.id}" from ${base}`);
101
101
 
102
102
  return () => this.dispose(manifest.id);
103
103
  }
@@ -69,7 +69,7 @@ export class QuickjsPluginLoader implements PluginLoader {
69
69
  bridge.eval(`register(ddPlugin);`, `${entryUrl}#register`);
70
70
 
71
71
  bridge.drainJobs();
72
- log.info("QuickjsPluginLoader", `Loaded QuickJS plugin "${manifest.id}"`);
72
+ log.info("quickjs-plugin-loader", `Loaded QuickJS plugin "${manifest.id}"`);
73
73
 
74
74
  return () => {
75
75
  bridge.dispose();
@@ -267,7 +267,7 @@ export class InlineWasmPluginLoader implements PluginLoader {
267
267
  (subscriptions as any).__tickUnsub = unsub;
268
268
  }
269
269
 
270
- log.info("InlineWasmPluginLoader", `Loaded WASM plugin "${manifest.id}"`);
270
+ log.info("inline-wasm-plugin-loader", `Loaded WASM plugin "${manifest.id}"`);
271
271
 
272
272
  return () => {
273
273
  const unsubTick = (subscriptions as any).__tickUnsub;
@@ -319,7 +319,7 @@ export class WasmPluginLoader implements PluginLoader {
319
319
  });
320
320
 
321
321
  worker.onerror = (e) => {
322
- log.error("WasmPluginLoader", `worker error for "${manifest.id}": ${e.message}`);
322
+ log.error("wasm-plugin-loader", `worker error for "${manifest.id}": ${e.message}`);
323
323
  };
324
324
 
325
325
  // Send init message with the WASM URL.
@@ -395,7 +395,7 @@ export class WasmPluginLoader implements PluginLoader {
395
395
  });
396
396
 
397
397
  await ready;
398
- log.info("WasmPluginLoader", `Loaded WASM plugin "${manifest.id}" in dedicated worker`);
398
+ log.info("wasm-plugin-loader", `Loaded WASM plugin "${manifest.id}" in dedicated worker`);
399
399
 
400
400
  return () => {
401
401
  worker.postMessage({ __wasmDispose: true });
@@ -73,7 +73,7 @@ export class WorkerPluginLoader implements PluginLoader {
73
73
  // sim-thread worker-js plugins are loaded by the sim worker's own host
74
74
  // via direct dynamic import (not this loader). Renderer-side host skips.
75
75
  log.info(
76
- "WorkerPluginLoader",
76
+ "worker-plugin-loader",
77
77
  `plugin "${manifest.id}" thread=${manifest.thread} — skipping on this host (sim-side host loads it)`,
78
78
  );
79
79
  return;