@aura3d/engine 4.1.2 → 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (268) hide show
  1. package/README.md +52 -730
  2. package/dist/audio/synth/SynthCueBank.d.ts.map +1 -1
  3. package/dist/audio/synth/SynthCueBank.js +11 -2
  4. package/dist/audio/synth/SynthCueBank.js.map +1 -1
  5. package/dist/audio/synth/types.d.ts +4 -0
  6. package/dist/audio/synth/types.d.ts.map +1 -1
  7. package/dist/aura3d-cli/cli.d.ts.map +1 -1
  8. package/dist/aura3d-cli/cli.js +49 -17
  9. package/dist/aura3d-cli/cli.js.map +1 -1
  10. package/dist/aura3d-cli/commands/evidence/index.d.ts +3 -0
  11. package/dist/aura3d-cli/commands/evidence/index.d.ts.map +1 -0
  12. package/dist/aura3d-cli/commands/evidence/index.js +12 -0
  13. package/dist/aura3d-cli/commands/evidence/index.js.map +1 -0
  14. package/dist/aura3d-cli/commands/evidence/judge.d.ts +18 -0
  15. package/dist/aura3d-cli/commands/evidence/judge.d.ts.map +1 -0
  16. package/dist/aura3d-cli/commands/evidence/judge.js +194 -0
  17. package/dist/aura3d-cli/commands/evidence/judge.js.map +1 -0
  18. package/dist/aura3d-cli/commands/evidence/judgeLib.d.ts +84 -0
  19. package/dist/aura3d-cli/commands/evidence/judgeLib.d.ts.map +1 -0
  20. package/dist/aura3d-cli/commands/evidence/judgeLib.js +178 -0
  21. package/dist/aura3d-cli/commands/evidence/judgeLib.js.map +1 -0
  22. package/dist/aura3d-cli/commands/registry.d.ts +1 -0
  23. package/dist/aura3d-cli/commands/registry.d.ts.map +1 -1
  24. package/dist/aura3d-cli/commands/registry.js +1 -0
  25. package/dist/aura3d-cli/commands/registry.js.map +1 -1
  26. package/dist/aura3d-cli/look/capture.d.ts +15 -7
  27. package/dist/aura3d-cli/look/capture.d.ts.map +1 -1
  28. package/dist/aura3d-cli/look/capture.js +85 -13
  29. package/dist/aura3d-cli/look/capture.js.map +1 -1
  30. package/dist/aura3d-cli/pull-bridge/adapters.d.ts +9 -1
  31. package/dist/aura3d-cli/pull-bridge/adapters.d.ts.map +1 -1
  32. package/dist/aura3d-cli/pull-bridge/adapters.js +30 -7
  33. package/dist/aura3d-cli/pull-bridge/adapters.js.map +1 -1
  34. package/dist/aura3d-cli/pull-bridge/search.d.ts +5 -0
  35. package/dist/aura3d-cli/pull-bridge/search.d.ts.map +1 -1
  36. package/dist/aura3d-cli/pull-bridge/search.js +7 -1
  37. package/dist/aura3d-cli/pull-bridge/search.js.map +1 -1
  38. package/dist/aura3d-cli/pull-bridge.js +1 -1
  39. package/dist/aura3d-cli/pull-bridge.js.map +1 -1
  40. package/dist/aura3d-cli/resolve-ladder.d.ts +123 -0
  41. package/dist/aura3d-cli/resolve-ladder.d.ts.map +1 -0
  42. package/dist/aura3d-cli/resolve-ladder.js +410 -0
  43. package/dist/aura3d-cli/resolve-ladder.js.map +1 -0
  44. package/dist/create-aura3d/index.js +1 -1
  45. package/dist/debug/index.d.ts +2 -2
  46. package/dist/debug/index.d.ts.map +1 -1
  47. package/dist/debug/index.js +1 -1
  48. package/dist/debug/index.js.map +1 -1
  49. package/dist/debug/safety/frameBoundary.d.ts +33 -0
  50. package/dist/debug/safety/frameBoundary.d.ts.map +1 -0
  51. package/dist/debug/safety/frameBoundary.js +40 -0
  52. package/dist/debug/safety/frameBoundary.js.map +1 -0
  53. package/dist/debug/safety/index.d.ts +1 -0
  54. package/dist/debug/safety/index.d.ts.map +1 -1
  55. package/dist/debug/safety/index.js +1 -0
  56. package/dist/debug/safety/index.js.map +1 -1
  57. package/dist/engine/agent-api/app/actorBoneMatrixLookup.d.ts +22 -0
  58. package/dist/engine/agent-api/app/actorBoneMatrixLookup.d.ts.map +1 -0
  59. package/dist/engine/agent-api/app/actorBoneMatrixLookup.js +24 -0
  60. package/dist/engine/agent-api/app/actorBoneMatrixLookup.js.map +1 -0
  61. package/dist/engine/agent-api/app/canvas.d.ts +16 -0
  62. package/dist/engine/agent-api/app/canvas.d.ts.map +1 -1
  63. package/dist/engine/agent-api/app/canvas.js +15 -0
  64. package/dist/engine/agent-api/app/canvas.js.map +1 -1
  65. package/dist/engine/agent-api/app/createAuraApp.d.ts.map +1 -1
  66. package/dist/engine/agent-api/app/createAuraApp.js +21 -3
  67. package/dist/engine/agent-api/app/createAuraApp.js.map +1 -1
  68. package/dist/engine/agent-api/app/frameLoop.d.ts.map +1 -1
  69. package/dist/engine/agent-api/app/frameLoop.js +21 -3
  70. package/dist/engine/agent-api/app/frameLoop.js.map +1 -1
  71. package/dist/engine/agent-api/app/mountFailure.d.ts +6 -0
  72. package/dist/engine/agent-api/app/mountFailure.d.ts.map +1 -0
  73. package/dist/engine/agent-api/app/mountFailure.js +9 -0
  74. package/dist/engine/agent-api/app/mountFailure.js.map +1 -0
  75. package/dist/engine/agent-api/app/parentFit.d.ts +35 -0
  76. package/dist/engine/agent-api/app/parentFit.d.ts.map +1 -0
  77. package/dist/engine/agent-api/app/parentFit.js +36 -0
  78. package/dist/engine/agent-api/app/parentFit.js.map +1 -0
  79. package/dist/engine/agent-api/compiler/customMaterial.js +3 -2
  80. package/dist/engine/agent-api/compiler/customMaterial.js.map +1 -1
  81. package/dist/engine/agent-api/compiler/geometry.d.ts +13 -0
  82. package/dist/engine/agent-api/compiler/geometry.d.ts.map +1 -1
  83. package/dist/engine/agent-api/compiler/geometry.js +30 -3
  84. package/dist/engine/agent-api/compiler/geometry.js.map +1 -1
  85. package/dist/engine/agent-api/compiler/primitives.d.ts +1 -2
  86. package/dist/engine/agent-api/compiler/primitives.d.ts.map +1 -1
  87. package/dist/engine/agent-api/compiler/primitives.js +21 -4
  88. package/dist/engine/agent-api/compiler/primitives.js.map +1 -1
  89. package/dist/engine/agent-api/index.d.ts +4 -0
  90. package/dist/engine/agent-api/index.d.ts.map +1 -1
  91. package/dist/engine/agent-api/index.js +1 -0
  92. package/dist/engine/agent-api/index.js.map +1 -1
  93. package/dist/engine/agent-api/nodes/batched.d.ts +10 -0
  94. package/dist/engine/agent-api/nodes/batched.d.ts.map +1 -1
  95. package/dist/engine/agent-api/nodes/batched.js +7 -5
  96. package/dist/engine/agent-api/nodes/batched.js.map +1 -1
  97. package/dist/engine/agent-api/nodes/builder.d.ts +13 -0
  98. package/dist/engine/agent-api/nodes/builder.d.ts.map +1 -1
  99. package/dist/engine/agent-api/nodes/builder.js +7 -3
  100. package/dist/engine/agent-api/nodes/builder.js.map +1 -1
  101. package/dist/engine/agent-api/nodes/cameras.d.ts +7 -0
  102. package/dist/engine/agent-api/nodes/cameras.d.ts.map +1 -1
  103. package/dist/engine/agent-api/nodes/cameras.js +7 -0
  104. package/dist/engine/agent-api/nodes/cameras.js.map +1 -1
  105. package/dist/engine/agent-api/nodes/chaseCamera.d.ts +122 -0
  106. package/dist/engine/agent-api/nodes/chaseCamera.d.ts.map +1 -0
  107. package/dist/engine/agent-api/nodes/chaseCamera.js +130 -0
  108. package/dist/engine/agent-api/nodes/chaseCamera.js.map +1 -0
  109. package/dist/engine/agent-api/nodes/effects.composite.d.ts +1 -0
  110. package/dist/engine/agent-api/nodes/effects.composite.d.ts.map +1 -1
  111. package/dist/engine/agent-api/nodes/effects.composite.js +2 -0
  112. package/dist/engine/agent-api/nodes/effects.composite.js.map +1 -1
  113. package/dist/engine/agent-api/nodes/effects.toon.d.ts +26 -0
  114. package/dist/engine/agent-api/nodes/effects.toon.d.ts.map +1 -0
  115. package/dist/engine/agent-api/nodes/effects.toon.js +70 -0
  116. package/dist/engine/agent-api/nodes/effects.toon.js.map +1 -0
  117. package/dist/engine/agent-api/nodes/instancedMesh.d.ts +10 -0
  118. package/dist/engine/agent-api/nodes/instancedMesh.d.ts.map +1 -1
  119. package/dist/engine/agent-api/nodes/instancedMesh.js +7 -5
  120. package/dist/engine/agent-api/nodes/instancedMesh.js.map +1 -1
  121. package/dist/engine/agent-api/nodes/prefabs/index.d.ts +3 -0
  122. package/dist/engine/agent-api/nodes/prefabs/index.d.ts.map +1 -1
  123. package/dist/engine/agent-api/nodes/prefabs/index.js +3 -0
  124. package/dist/engine/agent-api/nodes/prefabs/index.js.map +1 -1
  125. package/dist/engine/agent-api/nodes/prefabs/objectiveMarker.d.ts +32 -0
  126. package/dist/engine/agent-api/nodes/prefabs/objectiveMarker.d.ts.map +1 -0
  127. package/dist/engine/agent-api/nodes/prefabs/objectiveMarker.js +77 -0
  128. package/dist/engine/agent-api/nodes/prefabs/objectiveMarker.js.map +1 -0
  129. package/dist/engine/lanes/prd06.d.ts.map +1 -1
  130. package/dist/engine/lanes/prd06.js +1 -16
  131. package/dist/engine/lanes/prd06.js.map +1 -1
  132. package/dist/engine/production-runtime/actor/ModelTextureShare.d.ts +1 -1
  133. package/dist/engine/production-runtime/actor/ModelTextureShare.d.ts.map +1 -1
  134. package/dist/engine/production-runtime/actor/ModelTextureShare.js +1 -1
  135. package/dist/engine/production-runtime/actor/ModelTextureShare.js.map +1 -1
  136. package/dist/engine/public/index.d.ts +52 -67
  137. package/dist/engine/public/index.d.ts.map +1 -1
  138. package/dist/engine/public/index.js +59 -56
  139. package/dist/engine/public/index.js.map +1 -1
  140. package/dist/engine/qa/countedRng.d.ts +2 -0
  141. package/dist/engine/qa/countedRng.d.ts.map +1 -1
  142. package/dist/engine/qa/countedRng.js +3 -0
  143. package/dist/engine/qa/countedRng.js.map +1 -1
  144. package/dist/engine/qa/fixedStepLoop.d.ts +4 -0
  145. package/dist/engine/qa/fixedStepLoop.d.ts.map +1 -1
  146. package/dist/engine/qa/fixedStepLoop.js +6 -0
  147. package/dist/engine/qa/fixedStepLoop.js.map +1 -1
  148. package/dist/engine/qa/hooks.js +1 -1
  149. package/dist/engine/qa/hooks.js.map +1 -1
  150. package/dist/game/evidence/beacon.d.ts +16 -6
  151. package/dist/game/evidence/beacon.d.ts.map +1 -1
  152. package/dist/game/evidence/beacon.js +32 -14
  153. package/dist/game/evidence/beacon.js.map +1 -1
  154. package/dist/game/evidence/textureStatus.d.ts +24 -0
  155. package/dist/game/evidence/textureStatus.d.ts.map +1 -0
  156. package/dist/game/evidence/textureStatus.js +27 -0
  157. package/dist/game/evidence/textureStatus.js.map +1 -0
  158. package/dist/game/hud/canvasMinimap.d.ts +60 -0
  159. package/dist/game/hud/canvasMinimap.d.ts.map +1 -0
  160. package/dist/game/hud/canvasMinimap.js +62 -0
  161. package/dist/game/hud/canvasMinimap.js.map +1 -0
  162. package/dist/game/hud/compass.d.ts +16 -0
  163. package/dist/game/hud/compass.d.ts.map +1 -0
  164. package/dist/game/hud/compass.js +15 -0
  165. package/dist/game/hud/compass.js.map +1 -0
  166. package/dist/game/index.d.ts +9 -0
  167. package/dist/game/index.d.ts.map +1 -1
  168. package/dist/game/index.js +5 -0
  169. package/dist/game/index.js.map +1 -1
  170. package/dist/game/motion/boneAttach.d.ts +42 -0
  171. package/dist/game/motion/boneAttach.d.ts.map +1 -0
  172. package/dist/game/motion/boneAttach.js +166 -0
  173. package/dist/game/motion/boneAttach.js.map +1 -0
  174. package/dist/game/motion/cameraClear.d.ts +35 -0
  175. package/dist/game/motion/cameraClear.d.ts.map +1 -0
  176. package/dist/game/motion/cameraClear.js +64 -0
  177. package/dist/game/motion/cameraClear.js.map +1 -0
  178. package/dist/game/motion/doubleFrame.d.ts +37 -0
  179. package/dist/game/motion/doubleFrame.d.ts.map +1 -0
  180. package/dist/game/motion/doubleFrame.js +59 -0
  181. package/dist/game/motion/doubleFrame.js.map +1 -0
  182. package/dist/game/motion/footSlide.d.ts +32 -0
  183. package/dist/game/motion/footSlide.d.ts.map +1 -0
  184. package/dist/game/motion/footSlide.js +59 -0
  185. package/dist/game/motion/footSlide.js.map +1 -0
  186. package/dist/game/motion/impact.d.ts +113 -0
  187. package/dist/game/motion/impact.d.ts.map +1 -0
  188. package/dist/game/motion/impact.js +233 -0
  189. package/dist/game/motion/impact.js.map +1 -0
  190. package/dist/game/motion/index.d.ts +19 -0
  191. package/dist/game/motion/index.d.ts.map +1 -0
  192. package/dist/game/motion/index.js +10 -0
  193. package/dist/game/motion/index.js.map +1 -0
  194. package/dist/game/motion/locomotion.d.ts +55 -0
  195. package/dist/game/motion/locomotion.d.ts.map +1 -0
  196. package/dist/game/motion/locomotion.js +107 -0
  197. package/dist/game/motion/locomotion.js.map +1 -0
  198. package/dist/game/motion/motionGate.d.ts +41 -0
  199. package/dist/game/motion/motionGate.d.ts.map +1 -0
  200. package/dist/game/motion/motionGate.js +71 -0
  201. package/dist/game/motion/motionGate.js.map +1 -0
  202. package/dist/game/motion/presenter.d.ts +37 -0
  203. package/dist/game/motion/presenter.d.ts.map +1 -0
  204. package/dist/game/motion/presenter.js +72 -0
  205. package/dist/game/motion/presenter.js.map +1 -0
  206. package/dist/game/motion/smoothing.d.ts +34 -0
  207. package/dist/game/motion/smoothing.d.ts.map +1 -0
  208. package/dist/game/motion/smoothing.js +92 -0
  209. package/dist/game/motion/smoothing.js.map +1 -0
  210. package/dist/game/session/warmPrograms.d.ts +58 -0
  211. package/dist/game/session/warmPrograms.d.ts.map +1 -0
  212. package/dist/game/session/warmPrograms.js +63 -0
  213. package/dist/game/session/warmPrograms.js.map +1 -0
  214. package/dist/math/Random.d.ts +3 -0
  215. package/dist/math/Random.d.ts.map +1 -1
  216. package/dist/math/Random.js +7 -0
  217. package/dist/math/Random.js.map +1 -1
  218. package/dist/rendering/WebGL2Device.d.ts.map +1 -1
  219. package/dist/rendering/WebGL2Device.js +3 -4
  220. package/dist/rendering/WebGL2Device.js.map +1 -1
  221. package/dist/rendering/environment/EnvironmentCache.d.ts.map +1 -1
  222. package/dist/rendering/environment/EnvironmentCache.js +6 -1
  223. package/dist/rendering/environment/EnvironmentCache.js.map +1 -1
  224. package/dist/rendering/environment/neutralEmbedded.d.ts +5 -0
  225. package/dist/rendering/environment/neutralEmbedded.d.ts.map +1 -0
  226. package/dist/rendering/environment/neutralEmbedded.js +1118 -0
  227. package/dist/rendering/environment/neutralEmbedded.js.map +1 -0
  228. package/dist/rendering/environment/neutralEmbeddedLoader.d.ts +5 -0
  229. package/dist/rendering/environment/neutralEmbeddedLoader.d.ts.map +1 -0
  230. package/dist/rendering/environment/neutralEmbeddedLoader.js +32 -0
  231. package/dist/rendering/environment/neutralEmbeddedLoader.js.map +1 -0
  232. package/dist/rendering/geometry/Primitives.d.ts +4 -1
  233. package/dist/rendering/geometry/Primitives.d.ts.map +1 -1
  234. package/dist/rendering/geometry/Primitives.js +5 -1
  235. package/dist/rendering/geometry/Primitives.js.map +1 -1
  236. package/dist/rendering/renderer/CullingBatching.d.ts.map +1 -1
  237. package/dist/rendering/renderer/CullingBatching.js +3 -7
  238. package/dist/rendering/renderer/CullingBatching.js.map +1 -1
  239. package/dist/rendering/renderer/InstanceBounds.d.ts +18 -0
  240. package/dist/rendering/renderer/InstanceBounds.d.ts.map +1 -0
  241. package/dist/rendering/renderer/InstanceBounds.js +68 -0
  242. package/dist/rendering/renderer/InstanceBounds.js.map +1 -0
  243. package/dist/rendering/renderer/RenderShared.d.ts.map +1 -1
  244. package/dist/rendering/renderer/RenderShared.js +3 -7
  245. package/dist/rendering/renderer/RenderShared.js.map +1 -1
  246. package/dist/rendering/shadows/DirectionalCascadeFitter.d.ts.map +1 -1
  247. package/dist/rendering/shadows/DirectionalCascadeFitter.js +19 -10
  248. package/dist/rendering/shadows/DirectionalCascadeFitter.js.map +1 -1
  249. package/dist/rendering/webgl2/LdrPostprocessShader.d.ts +24 -0
  250. package/dist/rendering/webgl2/LdrPostprocessShader.d.ts.map +1 -0
  251. package/dist/rendering/webgl2/LdrPostprocessShader.js +233 -0
  252. package/dist/rendering/webgl2/LdrPostprocessShader.js.map +1 -0
  253. package/dist/rendering/webgl2/LegacyPost.d.ts +5 -3
  254. package/dist/rendering/webgl2/LegacyPost.d.ts.map +1 -1
  255. package/dist/rendering/webgl2/LegacyPost.js +23 -191
  256. package/dist/rendering/webgl2/LegacyPost.js.map +1 -1
  257. package/package.json +25 -25
  258. package/templates/cinematic-scene/package.json +4 -3
  259. package/templates/mini-game/index.html +3 -1
  260. package/templates/mini-game/package.json +4 -3
  261. package/templates/mini-game/public/fonts/graphik/Graphik-Medium-Web.woff2 +0 -0
  262. package/templates/mini-game/public/fonts/graphik/Graphik-Regular-Web.woff2 +0 -0
  263. package/templates/mini-game/src/main.ts +1 -1
  264. package/templates/product-viewer/package.json +4 -3
  265. package/templates/production-asset-inspector/package.json +1 -1
  266. package/templates/production-material-studio/package.json +1 -1
  267. package/templates/production-product-configurator/package.json +1 -1
  268. package/templates/production-product-viewer/package.json +1 -1
@@ -0,0 +1,410 @@
1
+ /**
2
+ * `aura3d assets resolve "<need>"`: a build-time decision ladder for one asset need.
3
+ *
4
+ * Rungs, in order: (1) an asset already admitted in this project, (2) a directly
5
+ * downloadable, licence-clear model, texture or HDRI from open sources (Khronos samples,
6
+ * Poly Haven, ambientCG, the jsDelivr CC0 mirror), (3) Meshy generation from a text
7
+ * prompt, only with `--allow meshy` and a budget that covers the estimate, (4) a
8
+ * procedural recipe the agent pastes into its scene (primitives, built in code like
9
+ * three.js geometry). Nothing is fetched or generated at runtime: every rung that
10
+ * produces a file goes through admission (sha256, provenance, licence) and typegen.
11
+ */
12
+ import { spawnSync } from "node:child_process";
13
+ import { existsSync, mkdtempSync, readdirSync } from "node:fs";
14
+ import { tmpdir } from "node:os";
15
+ import { join } from "node:path";
16
+ import { readAssetManifest } from "./asset-manifest.js";
17
+ import { runResolve } from "./pull-bridge.js";
18
+ import { runSearch } from "./pull-bridge/search.js";
19
+ export const LADDER_ROLES = ["hero", "prop", "background", "character", "texture", "hdri"];
20
+ /** Meshy credits per role: preview 20 + refine 10; characters add rig 5 + one animation 3. */
21
+ export const MESHY_CREDIT_ESTIMATE = {
22
+ hero: 30,
23
+ prop: 30,
24
+ background: 30,
25
+ character: 38,
26
+ texture: 10,
27
+ hdri: 0,
28
+ };
29
+ /** Triangle budgets per role (docs/agents/asset-workflow.md). */
30
+ export const ROLE_TRIANGLE_BUDGET = {
31
+ hero: 40_000,
32
+ prop: 6_000,
33
+ background: 15_000,
34
+ character: 30_000,
35
+ texture: undefined,
36
+ hdri: undefined,
37
+ };
38
+ const STOP_WORDS = new Set([
39
+ "a", "an", "the", "of", "for", "with", "and", "or", "in", "on", "to", "my", "some",
40
+ "low", "poly", "lowpoly", "high", "detailed", "simple", "stylised", "stylized", "realistic",
41
+ "small", "large", "big", "tiny", "old", "new", "model", "asset", "glb", "gltf", "3d", "game", "pbr",
42
+ "tall", "short", "wide", "narrow", "round", "square", "corner", "straight", "end", "double", "single", "half",
43
+ "top", "bottom", "left", "right", "broken", "damaged", "dark", "variant", "alt", "lod", "pure", "pack", "kit",
44
+ "huge", "giant", "mini", "medium", "big", "little",
45
+ ]);
46
+ /** Singular form good enough for matching English asset nouns. */
47
+ export function singular(word) {
48
+ if (word.length > 4 && word.endsWith("ies"))
49
+ return `${word.slice(0, -3)}y`;
50
+ if (word.length > 4 && /(ches|shes|xes|sses)$/.test(word))
51
+ return word.slice(0, -2);
52
+ if (word.length > 3 && word.endsWith("s") && !word.endsWith("ss"))
53
+ return word.slice(0, -1);
54
+ return word;
55
+ }
56
+ function tokens(text) {
57
+ return text
58
+ .toLowerCase()
59
+ .replace(/([a-z])([A-Z])/g, "$1 $2")
60
+ .split(/[^a-z0-9]+/)
61
+ .filter((token) => token.length > 0);
62
+ }
63
+ /**
64
+ * The head noun of an English need: the last content word. "wooden bridge" -> "bridge",
65
+ * "street lamp" -> "lamp", "oak tree" -> "tree", "sports car" -> "car".
66
+ */
67
+ export function headNoun(need) {
68
+ const words = tokens(need).filter((word) => !STOP_WORDS.has(word) && !/^\d+$/.test(word));
69
+ const last = words.at(-1);
70
+ return last === undefined ? undefined : singular(last);
71
+ }
72
+ /** True when `text` (a title, id or tag list) contains the head noun. */
73
+ export function mentionsNoun(text, noun) {
74
+ const words = new Set(tokens(text).map(singular));
75
+ return words.has(noun) || tokens(text).some((word) => word.startsWith(noun) && word.length <= noun.length + 3);
76
+ }
77
+ /**
78
+ * True when a candidate's own title is the needed thing, not merely mentions it: the title's head
79
+ * noun must be the need's noun. "Bridge Pillar" is a pillar, not a bridge; "Garbage Truck" from a
80
+ * "car-kit" pack is a truck, not a car. Precision over recall: a miss falls through to the next rung.
81
+ */
82
+ export function titleIsNoun(title, noun) {
83
+ const head = headNoun(title.replace(/\([^)]*\)/g, " "));
84
+ if (head === noun)
85
+ return true;
86
+ // "Belfast Sunset (Pure Sky)": the parenthesised qualifier names the kind.
87
+ const qualifier = /\(([^)]*)\)/.exec(title)?.[1];
88
+ return qualifier !== undefined && headNoun(qualifier) === noun;
89
+ }
90
+ function camelName(need) {
91
+ const words = tokens(need).filter((word) => !STOP_WORDS.has(word));
92
+ const base = (words.length > 0 ? words : ["asset"]).slice(-3);
93
+ const name = base.map((word, index) => (index === 0 ? word : word[0].toUpperCase() + word.slice(1))).join("");
94
+ return /^[a-z_]/.test(name) ? name : `asset${name[0].toUpperCase()}${name.slice(1)}`;
95
+ }
96
+ function entryText(entry) {
97
+ return [entry.id, entry.source, ...(entry.nodeNames ?? []), entry.suitabilityReason ?? ""].join(" ");
98
+ }
99
+ function profileFor(role) {
100
+ if (role === "character")
101
+ return "animation-character";
102
+ return "general";
103
+ }
104
+ function searchQuery(need, role) {
105
+ if (role === "texture" && !/\btextures?\b/i.test(need))
106
+ return `${need} texture`;
107
+ if (role === "hdri" && !/\bhdri?\b/i.test(need))
108
+ return `${need} hdri`;
109
+ return need;
110
+ }
111
+ function fitsRole(candidate, role) {
112
+ if (role === "texture" && candidate.format !== undefined && candidate.format !== "texture-set" && candidate.format !== "image") {
113
+ return `format ${candidate.format} is not a texture`;
114
+ }
115
+ if (role === "hdri" && candidate.format !== undefined && candidate.format !== "hdr")
116
+ return `format ${candidate.format} is not an HDRI`;
117
+ if ((role === "hero" || role === "prop" || role === "background" || role === "character") && (candidate.format === "texture-set" || candidate.format === "image" || candidate.format === "hdr")) {
118
+ return `format ${candidate.format} is not a model`;
119
+ }
120
+ const budget = ROLE_TRIANGLE_BUDGET[role];
121
+ if (budget !== undefined && typeof candidate.triangles === "number" && candidate.triangles > budget) {
122
+ return `${candidate.triangles} triangles exceeds the ${role} budget of ${budget}`;
123
+ }
124
+ return undefined;
125
+ }
126
+ export function formatSize(bytes) {
127
+ if (bytes === undefined)
128
+ return "size unknown";
129
+ if (bytes >= 1024 * 1024)
130
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
131
+ return `${Math.max(1, Math.round(bytes / 1024))} KB`;
132
+ }
133
+ export function describeCandidate(candidate) {
134
+ const triangles = typeof candidate.triangles === "number" ? `${candidate.triangles.toLocaleString("en-US")} triangles` : "triangles unknown";
135
+ return `${candidate.title} (${candidate.id}, ${candidate.license}, ${triangles}, ${formatSize(candidate.sizeBytes)})`;
136
+ }
137
+ const defaultMeshyRunner = ({ prompt, outDir, budget, env }) => {
138
+ const command = env["AURA3D_MESHY_CMD"];
139
+ if (!command) {
140
+ return { ok: false, message: "AURA3D_MESHY_CMD is not set: run the printed Meshy commands yourself, then `aura3d assets import-meshy`." };
141
+ }
142
+ // No shell: the prompt is passed as a single argument, never interpolated into a command line.
143
+ const run = spawnSync(command, ["--prompt", prompt, "--out", outDir, "--budget", String(budget)], { env, encoding: "utf8" });
144
+ if (run.status !== 0)
145
+ return { ok: false, message: `${command} exited ${String(run.status)}: ${(run.stderr || run.stdout || "").trim().slice(0, 400)}` };
146
+ return { ok: true, message: (run.stdout || "").trim().slice(0, 400) };
147
+ };
148
+ export function meshyPrompt(need, role) {
149
+ const base = need.trim();
150
+ const style = "stylised, clean topology, game-ready, matte flat colours, no text, no logos, no brand marks";
151
+ if (role === "character")
152
+ return `${base}, single humanoid character in A-pose, full body, ${style}`;
153
+ if (role === "texture")
154
+ return `${base}, seamless tileable surface`;
155
+ return `${base}, single solid closed object, ${style}`;
156
+ }
157
+ export async function runResolveLadder(options) {
158
+ const need = options.need.trim();
159
+ if (!need)
160
+ throw new Error('Usage: aura3d assets resolve "<need>" [--name <id>] [--role hero|prop|background|character|texture|hdri] [--budget credits] [--allow meshy] [--dry-run]');
161
+ const projectDir = options.projectDir ?? process.cwd();
162
+ const env = options.env ?? process.env;
163
+ const role = options.role ?? "prop";
164
+ const name = options.name ?? camelName(need);
165
+ if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name))
166
+ throw new Error(`Aura3D resolve failed: --name must be a valid identifier (got "${name}").`);
167
+ const dryRun = options.dryRun === true;
168
+ const noun = headNoun(need);
169
+ const skipped = [];
170
+ const warnings = [];
171
+ const messages = [];
172
+ const base = { need, headNoun: noun, role, dryRun, name, skipped, warnings, messages };
173
+ // Rung 1: already admitted in this project.
174
+ const manifest = (options.readManifest ?? readAssetManifest)(projectDir);
175
+ const wantsModel = role !== "texture" && role !== "hdri";
176
+ const local = noun === undefined ? undefined : manifest.assets.find((entry) => {
177
+ if (wantsModel && entry.type !== "model")
178
+ return false;
179
+ if (role === "texture" && entry.type !== "texture")
180
+ return false;
181
+ if (role === "hdri" && entry.type !== "environment" && entry.format !== "hdr")
182
+ return false;
183
+ return entry.id === name || mentionsNoun(entryText(entry), noun);
184
+ });
185
+ if (local) {
186
+ messages.push(`Use the admitted asset: model(assets.${local.id}) (${formatSize(local.sizeBytes)}, ${local.hash}).`);
187
+ return { ...base, ok: true, chosen: "project", reason: `"${local.id}" is already admitted in this project and matches "${noun}".`, costCredits: 0, projectAsset: { id: local.id, url: local.url, sizeBytes: local.sizeBytes } };
188
+ }
189
+ skipped.push({ rung: "project", reason: noun === undefined ? "the need has no noun to match" : `no admitted asset matches "${noun}"` });
190
+ // Rung 2: open, licence-clear sources.
191
+ const query = searchQuery(need, role);
192
+ let search;
193
+ try {
194
+ search = await (options.searchFn ?? runSearch)({ query, constraints: { ...options.constraints, profile: options.constraints?.profile ?? profileFor(role) } });
195
+ for (const warning of search.warnings)
196
+ warnings.push(warning);
197
+ }
198
+ catch (error) {
199
+ warnings.push(`open-source search failed: ${error.message}`);
200
+ }
201
+ const rejected = [];
202
+ const candidate = search?.candidates.find((line) => {
203
+ if (!line.autoPullable)
204
+ return false;
205
+ if (noun !== undefined && !mentionsNoun(line.title, noun)) {
206
+ rejected.push(`${line.title}: does not mention "${noun}"`);
207
+ return false;
208
+ }
209
+ const misfit = fitsRole(line, role);
210
+ if (misfit) {
211
+ rejected.push(`${line.title}: ${misfit}`);
212
+ return false;
213
+ }
214
+ if (noun !== undefined && !titleIsNoun(line.title, noun)) {
215
+ rejected.push(`${line.title}: is a ${headNoun(line.title.replace(/\([^)]*\)/g, " ")) ?? "different thing"}, not a ${noun}`);
216
+ return false;
217
+ }
218
+ return true;
219
+ });
220
+ if (candidate) {
221
+ messages.push(`Open source: ${describeCandidate(candidate)}.`);
222
+ if (dryRun) {
223
+ messages.push(`Dry run: would admit it as assets.${name} with sha256, provenance and licence.`);
224
+ return { ...base, ok: true, chosen: "open-source", reason: `licence-clear match for "${noun ?? need}" from ${candidate.source}`, costCredits: 0, candidate };
225
+ }
226
+ const resolved = await (options.resolveFn ?? runResolve)({ query, name, projectDir, candidateId: candidate.id, constraints: { ...options.constraints, profile: options.constraints?.profile ?? profileFor(role) } });
227
+ for (const message of resolved.messages)
228
+ messages.push(message);
229
+ for (const warning of resolved.warnings)
230
+ warnings.push(warning);
231
+ if (resolved.ok) {
232
+ return { ...base, ok: true, chosen: "open-source", reason: `licence-clear match for "${noun ?? need}" from ${candidate.source}`, costCredits: 0, candidate, resolve: resolved };
233
+ }
234
+ skipped.push({ rung: "open-source", reason: `admission of ${candidate.id} failed` });
235
+ }
236
+ else {
237
+ const detail = rejected.length > 0 ? `; rejected: ${rejected.slice(0, 3).join("; ")}` : "";
238
+ skipped.push({ rung: "open-source", reason: `no licence-clear, downloadable match for "${noun ?? need}"${detail}` });
239
+ }
240
+ // Rung 3: Meshy, only when allowed and within budget.
241
+ const estimate = MESHY_CREDIT_ESTIMATE[role];
242
+ const prompt = meshyPrompt(need, role);
243
+ if (role === "hdri") {
244
+ skipped.push({ rung: "meshy", reason: "Meshy does not generate HDRIs" });
245
+ }
246
+ else if (!options.allowMeshy) {
247
+ skipped.push({ rung: "meshy", reason: `needs --allow meshy (estimate ${estimate} credits)` });
248
+ }
249
+ else if ((options.budget ?? 0) < estimate) {
250
+ skipped.push({ rung: "meshy", reason: `--budget ${options.budget ?? 0} is below the ${estimate}-credit estimate` });
251
+ }
252
+ else {
253
+ const outDir = mkdtempSync(join(tmpdir(), "aura3d-meshy-"));
254
+ const commands = [
255
+ `<your Meshy generator> --prompt ${JSON.stringify(prompt)} --out ${outDir} --budget ${estimate}`,
256
+ `aura3d assets import-meshy --input ${outDir} --name ${name} --role ${role === "character" ? "character" : "prop"}`,
257
+ "aura3d assets validate && aura3d assets typegen",
258
+ ];
259
+ if (dryRun) {
260
+ messages.push(`Dry run: would generate with Meshy for about ${estimate} credits.`);
261
+ return { ...base, ok: true, chosen: "meshy", reason: `no project or open-source match; Meshy allowed within budget`, costCredits: 0, meshy: { prompt, estimateCredits: estimate, commands, ran: false } };
262
+ }
263
+ const runner = options.meshyRunner ?? defaultMeshyRunner;
264
+ const ran = runner({ prompt, outDir, budget: estimate, env });
265
+ messages.push(ran.message);
266
+ const produced = existsSync(outDir) && readdirSync(outDir).some((file) => /\.glb$/i.test(file));
267
+ if (ran.ok && produced) {
268
+ messages.push(`Generated into ${outDir}. Admit it: ${commands[1]}, then ${commands[2]}.`);
269
+ return { ...base, ok: true, chosen: "meshy", reason: "no project or open-source match; generated with Meshy within budget", costCredits: estimate, meshy: { prompt, estimateCredits: estimate, commands: commands.slice(1), ran: true } };
270
+ }
271
+ skipped.push({ rung: "meshy", reason: ran.ok ? "the generator produced no GLB" : ran.message });
272
+ messages.push(`Meshy plan (not run): ${commands.join(" then ")}`);
273
+ }
274
+ // Rung 4: procedural recipe for props; characters, textures and HDRIs have none.
275
+ if (role === "character" || role === "texture" || role === "hdri") {
276
+ skipped.push({ rung: "procedural", reason: `no procedural recipe for a ${role}` });
277
+ messages.push(role === "character"
278
+ ? "No character found. Generate one with --allow meshy --budget 40, or admit a licensed file with `aura3d assets add`."
279
+ : `No ${role} found. Admit a licensed file with \`aura3d assets add --type ${role === "hdri" ? "environment" : "texture"}\`.`);
280
+ return { ...base, ok: false, chosen: "none", reason: `nothing in the project or open sources, Meshy not run, and no procedural recipe for a ${role}`, costCredits: 0 };
281
+ }
282
+ const procedural = proceduralRecipe(need, name);
283
+ if (pickRecipeOrUndefined(need) === undefined) {
284
+ messages.push(`No recipe for a ${noun ?? "need like this"}: the box below is a placeholder. For the real thing run with --allow meshy --budget ${estimate || 30}, or admit a licensed file with \`aura3d assets add\`.`);
285
+ }
286
+ messages.push(`Build it in code (${procedural.recipe} recipe): paste the snippet and add \`${name}\` to your scene.`);
287
+ return { ...base, ok: true, chosen: "procedural", reason: "no admitted, open-source or generated asset; build from primitives", costCredits: 0, procedural };
288
+ }
289
+ /** Keyword -> parts, in metres, standing on y = 0. */
290
+ export const PROCEDURAL_RECIPES = {
291
+ crate: [{ shape: "box", size: [1, 1, 1], color: "#8a5a2b", roughness: 0.85, at: [0, 0.5, 0] }],
292
+ barrel: [
293
+ { shape: "cylinder", size: [0.7, 1, 0.7], color: "#7a4a24", roughness: 0.8, at: [0, 0.5, 0] },
294
+ { shape: "cylinder", size: [0.74, 0.06, 0.74], color: "#3c3c40", metallic: 0.8, roughness: 0.4, at: [0, 0.2, 0] },
295
+ { shape: "cylinder", size: [0.74, 0.06, 0.74], color: "#3c3c40", metallic: 0.8, roughness: 0.4, at: [0, 0.8, 0] },
296
+ ],
297
+ table: [
298
+ { shape: "box", size: [1.6, 0.08, 0.9], color: "#9a6b3f", roughness: 0.7, at: [0, 0.74, 0] },
299
+ { shape: "box", size: [0.08, 0.7, 0.08], color: "#7a5230", at: [-0.7, 0.35, -0.35] },
300
+ { shape: "box", size: [0.08, 0.7, 0.08], color: "#7a5230", at: [0.7, 0.35, -0.35] },
301
+ { shape: "box", size: [0.08, 0.7, 0.08], color: "#7a5230", at: [-0.7, 0.35, 0.35] },
302
+ { shape: "box", size: [0.08, 0.7, 0.08], color: "#7a5230", at: [0.7, 0.35, 0.35] },
303
+ ],
304
+ chair: [
305
+ { shape: "box", size: [0.5, 0.06, 0.5], color: "#9a6b3f", at: [0, 0.45, 0] },
306
+ { shape: "box", size: [0.5, 0.5, 0.06], color: "#9a6b3f", at: [0, 0.73, -0.22] },
307
+ { shape: "box", size: [0.05, 0.45, 0.05], color: "#7a5230", at: [-0.21, 0.22, -0.21] },
308
+ { shape: "box", size: [0.05, 0.45, 0.05], color: "#7a5230", at: [0.21, 0.22, -0.21] },
309
+ { shape: "box", size: [0.05, 0.45, 0.05], color: "#7a5230", at: [-0.21, 0.22, 0.21] },
310
+ { shape: "box", size: [0.05, 0.45, 0.05], color: "#7a5230", at: [0.21, 0.22, 0.21] },
311
+ ],
312
+ tree: [
313
+ { shape: "cylinder", size: [0.3, 2, 0.3], color: "#5a3d24", roughness: 0.95, at: [0, 1, 0] },
314
+ { shape: "cone", params: { radius: 1.2, height: 2.6 }, color: "#3f7a3a", roughness: 0.9, at: [0, 3.2, 0] },
315
+ ],
316
+ rock: [
317
+ { shape: "sphere", size: 1.2, color: "#7d7a74", roughness: 1, at: [0, 0.4, 0] },
318
+ { shape: "sphere", size: 0.7, color: "#6f6c66", roughness: 1, at: [0.5, 0.25, 0.2] },
319
+ ],
320
+ fence: [
321
+ { shape: "box", size: [0.1, 1, 0.1], color: "#8b6a45", at: [-1, 0.5, 0] },
322
+ { shape: "box", size: [0.1, 1, 0.1], color: "#8b6a45", at: [0, 0.5, 0] },
323
+ { shape: "box", size: [0.1, 1, 0.1], color: "#8b6a45", at: [1, 0.5, 0] },
324
+ { shape: "box", size: [2.2, 0.1, 0.05], color: "#a07c52", at: [0, 0.75, 0] },
325
+ { shape: "box", size: [2.2, 0.1, 0.05], color: "#a07c52", at: [0, 0.35, 0] },
326
+ ],
327
+ lamp: [
328
+ { shape: "cylinder", size: [0.12, 3.2, 0.12], color: "#2e3238", metallic: 0.8, roughness: 0.4, at: [0, 1.6, 0] },
329
+ { shape: "box", size: [0.5, 0.12, 0.3], color: "#2e3238", metallic: 0.8, roughness: 0.4, at: [0.2, 3.25, 0] },
330
+ { shape: "sphere", size: 0.22, color: "#ffe9b0", roughness: 0.3, at: [0.35, 3.13, 0] },
331
+ ],
332
+ building: [
333
+ { shape: "box", size: [8, 12, 8], color: "#b9b2a6", roughness: 0.9, at: [0, 6, 0] },
334
+ { shape: "box", size: [8.4, 0.4, 8.4], color: "#6f6a62", at: [0, 12.2, 0] },
335
+ ],
336
+ car: [
337
+ { shape: "box", size: [1.8, 0.6, 4.2], color: "#c0392b", roughness: 0.5, metallic: 0.3, at: [0, 0.55, 0] },
338
+ { shape: "box", size: [1.6, 0.5, 2.2], color: "#2c3e50", roughness: 0.2, at: [0, 1.05, -0.2] },
339
+ { shape: "cylinder", size: [0.66, 0.24, 0.66], color: "#1b1b1b", at: [-0.9, 0.33, 1.3] },
340
+ { shape: "cylinder", size: [0.66, 0.24, 0.66], color: "#1b1b1b", at: [0.9, 0.33, 1.3] },
341
+ { shape: "cylinder", size: [0.66, 0.24, 0.66], color: "#1b1b1b", at: [-0.9, 0.33, -1.3] },
342
+ { shape: "cylinder", size: [0.66, 0.24, 0.66], color: "#1b1b1b", at: [0.9, 0.33, -1.3] },
343
+ ],
344
+ };
345
+ const RECIPE_ALIASES = {
346
+ box: "crate", chest: "crate", cask: "barrel", keg: "barrel", desk: "table", bench: "chair", stool: "chair",
347
+ pine: "tree", oak: "tree", bush: "tree", boulder: "rock", stone: "rock", wall: "fence", railing: "fence",
348
+ streetlight: "lamp", light: "lamp", lantern: "lamp", post: "lamp", house: "building", tower: "building", block: "building",
349
+ vehicle: "car", truck: "car", van: "car", taxi: "car", sedan: "car",
350
+ };
351
+ /** The best recipe for a need: the head noun, then any other word, then aliases; a crate as the fallback. */
352
+ export function pickRecipe(need) {
353
+ return pickRecipeOrUndefined(need) ?? "crate";
354
+ }
355
+ /** The recipe for a need, or undefined when no keyword or alias matches (the crate is then a placeholder). */
356
+ export function pickRecipeOrUndefined(need) {
357
+ const words = tokens(need).map(singular);
358
+ const ordered = [headNoun(need), ...words.reverse()].filter((word) => word !== undefined);
359
+ for (const word of ordered) {
360
+ if (PROCEDURAL_RECIPES[word])
361
+ return word;
362
+ const alias = RECIPE_ALIASES[word];
363
+ if (alias)
364
+ return alias;
365
+ }
366
+ return undefined;
367
+ }
368
+ function partCode(part, index, name) {
369
+ const options = [`name: "${name}-${index}"`];
370
+ if (part.size !== undefined)
371
+ options.push(`size: ${Array.isArray(part.size) ? `[${part.size.join(", ")}]` : String(part.size)}`);
372
+ if (part.params)
373
+ options.push(`params: { ${Object.entries(part.params).map(([key, value]) => `${key}: ${value}`).join(", ")} }`);
374
+ const pbr = [`color: "${part.color}"`];
375
+ if (part.roughness !== undefined)
376
+ pbr.push(`roughness: ${part.roughness}`);
377
+ if (part.metallic !== undefined)
378
+ pbr.push(`metallic: ${part.metallic}`);
379
+ options.push(`material: material.pbr({ ${pbr.join(", ")} })`);
380
+ return ` primitives.${part.shape}({ ${options.join(", ")} }).position(${part.at.join(", ")}),`;
381
+ }
382
+ export function proceduralRecipe(need, name) {
383
+ const matched = pickRecipeOrUndefined(need);
384
+ const recipe = matched ?? "crate";
385
+ const parts = PROCEDURAL_RECIPES[recipe];
386
+ const note = matched === undefined ? " PLACEHOLDER: no recipe matches this need; replace it with a real model before shipping." : " Tune sizes and colours.";
387
+ const lines = [
388
+ `import { group, material, primitives } from "../engine/index.js";`,
389
+ ``,
390
+ `// ${need.replace(/[\r\n*/]/g, " ")}: built from primitives (${recipe} recipe), metres, standing on y = 0.${note}`,
391
+ `export const ${name} = group("${name}", [`,
392
+ ...parts.map((part, index) => partCode(part, index, name)),
393
+ `]);`,
394
+ ];
395
+ return { recipe, snippet: lines.join("\n") };
396
+ }
397
+ export function printLadderReport(report, print = console.log) {
398
+ print(`Need: "${report.need}" (role ${report.role}${report.headNoun ? `, matching "${report.headNoun}"` : ""})`);
399
+ print(`Chosen: ${report.chosen}: ${report.reason}`);
400
+ for (const skip of report.skipped)
401
+ print(` skipped ${skip.rung}: ${skip.reason}`);
402
+ print(`Cost: ${report.costCredits} credits${report.dryRun ? " (dry run)" : ""}`);
403
+ for (const message of report.messages)
404
+ print(message);
405
+ if (report.procedural)
406
+ print(`\n${report.procedural.snippet}`);
407
+ for (const warning of report.warnings)
408
+ print(`warning: ${warning}`);
409
+ }
410
+ //# sourceMappingURL=resolve-ladder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-ladder.js","sourceRoot":"","sources":["../../../../packages/aura3d-cli/src/resolve-ladder.ts"],"names":[],"mappings":"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"}
@@ -75,7 +75,7 @@ export function createA3DProject(options) {
75
75
  const dependencies = { ...(packageJson.dependencies ?? {}) };
76
76
  const auraDependencies = Object.keys(dependencies).filter((name) => name.startsWith("@aura3d/"));
77
77
  if (auraDependencies.length === 0) {
78
- dependencies["@aura3d/engine"] = options.packageVersion ?? "4.1.2";
78
+ dependencies["@aura3d/engine"] = options.packageVersion ?? "4.2.0";
79
79
  }
80
80
  else if (options.packageVersion) {
81
81
  for (const dependency of auraDependencies)
@@ -28,6 +28,6 @@ export { buildAxesHelper, buildBoundsHelper, buildCameraFrustumHelper, buildDire
28
28
  export type { AxesHelperOptions, BoundsHelperOptions, CameraFrustumHelperOptions, DebugColor, DebugVec3, DirectionalLightHelperOptions, GridHelperOptions, SkeletonHelperJoint } from "./SceneHelpers.js";
29
29
  export { ReportExporter } from "./ReportExporter.js";
30
30
  export type { DebugReport } from "./ReportExporter.js";
31
- export { DEFAULT_HEAL_LADDER, DEFAULT_HEAL_STORAGE_KEY, QR_HEAL_LADDER, createBlackFrameWatch, formatEngineSection, formatGpuProbe, healParams, healRungName, healStage, installBlackFrameGuard, installDiagnosticsPanel, installFrameTap, installSafetyNet, isBlackFrame, probeGpu, qrHealRungName, qrHealStage, qrHealUrl, resolveQualitySwitches } from "./safety/index.js";
32
- export type { BlackFrameGuardOptions, BlackFrameWatch, BlackFrameWatchOptions, DiagnosticsAppLike, DiagnosticsPanelHandle, DiagnosticsPanelOptions, FrameTap, FrameTapOptions, GpuProbe, HealGlobal, HealRung, QualitySwitches, ResolveQualitySwitchesOptions, SafetyNet, SafetyNetOptions, SafetyReport, SafetySettings } from "./safety/index.js";
31
+ export { DEFAULT_HEAL_LADDER, DEFAULT_HEAL_STORAGE_KEY, QR_HEAL_LADDER, createBlackFrameWatch, createFrameErrorBoundary, formatEngineSection, formatGpuProbe, healParams, healRungName, healStage, installBlackFrameGuard, installDiagnosticsPanel, installFrameTap, installSafetyNet, isBlackFrame, probeGpu, qrHealRungName, qrHealStage, qrHealUrl, resolveQualitySwitches } from "./safety/index.js";
32
+ export type { BlackFrameGuardOptions, BlackFrameWatch, BlackFrameWatchOptions, DiagnosticsAppLike, DiagnosticsPanelHandle, DiagnosticsPanelOptions, FrameErrorBoundary, FrameErrorBoundaryOptions, FrameErrorInfo, FrameErrorStats, FrameTap, FrameTapOptions, GpuProbe, HealGlobal, HealRung, QualitySwitches, ResolveQualitySwitchesOptions, SafetyNet, SafetyNetOptions, SafetyReport, SafetySettings } from "./safety/index.js";
33
33
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/debug/src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/debug/src/index.ts"],"names":[],"mappings":"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"}
@@ -13,5 +13,5 @@ export { DebugOverlay } from "./DebugOverlay.js";
13
13
  export { DebugLineCanvasRenderer } from "./DebugLineCanvasRenderer.js";
14
14
  export { buildAxesHelper, buildBoundsHelper, buildCameraFrustumHelper, buildDirectionalLightHelper, buildGridHelper, buildSkeletonHelper } from "./SceneHelpers.js";
15
15
  export { ReportExporter } from "./ReportExporter.js";
16
- export { DEFAULT_HEAL_LADDER, DEFAULT_HEAL_STORAGE_KEY, QR_HEAL_LADDER, createBlackFrameWatch, formatEngineSection, formatGpuProbe, healParams, healRungName, healStage, installBlackFrameGuard, installDiagnosticsPanel, installFrameTap, installSafetyNet, isBlackFrame, probeGpu, qrHealRungName, qrHealStage, qrHealUrl, resolveQualitySwitches } from "./safety/index.js";
16
+ export { DEFAULT_HEAL_LADDER, DEFAULT_HEAL_STORAGE_KEY, QR_HEAL_LADDER, createBlackFrameWatch, createFrameErrorBoundary, formatEngineSection, formatGpuProbe, healParams, healRungName, healStage, installBlackFrameGuard, installDiagnosticsPanel, installFrameTap, installSafetyNet, isBlackFrame, probeGpu, qrHealRungName, qrHealStage, qrHealUrl, resolveQualitySwitches } from "./safety/index.js";
17
17
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/debug/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEvF,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAElF,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAExF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE1E,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,2BAA2B,EAC3B,eAAe,EACf,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAW3B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,UAAU,EACV,YAAY,EACZ,SAAS,EACT,sBAAsB,EACtB,uBAAuB,EACvB,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,WAAW,EACX,SAAS,EACT,sBAAsB,EACvB,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/debug/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEvF,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAElF,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAExF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE1E,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,2BAA2B,EAC3B,eAAe,EACf,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAW3B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,cAAc,EACd,qBAAqB,EACrB,wBAAwB,EACxB,mBAAmB,EACnB,cAAc,EACd,UAAU,EACV,YAAY,EACZ,SAAS,EACT,sBAAsB,EACtB,uBAAuB,EACvB,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,WAAW,EACX,SAAS,EACT,sBAAsB,EACvB,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,33 @@
1
+ export interface FrameErrorInfo {
2
+ /** Failures in a row, including this one. */
3
+ readonly consecutive: number;
4
+ /** Failures since the boundary was created. */
5
+ readonly total: number;
6
+ /** True the first time this message is seen. */
7
+ readonly firstOfKind: boolean;
8
+ }
9
+ export interface FrameErrorBoundaryOptions {
10
+ /** Consecutive failures that count as fatal. Default 30. */
11
+ readonly maxConsecutive?: number;
12
+ /** Called for every failure (default: one `console.error` per distinct message, code `FRAME_ERROR`). */
13
+ readonly onError?: (error: unknown, info: FrameErrorInfo) => void;
14
+ /** Called once when `maxConsecutive` is reached; show an error overlay here. */
15
+ readonly onFatal?: (error: unknown, info: FrameErrorInfo) => void;
16
+ }
17
+ export interface FrameErrorStats {
18
+ readonly total: number;
19
+ readonly consecutive: number;
20
+ readonly fatal: boolean;
21
+ readonly lastMessage: string | null;
22
+ }
23
+ export interface FrameErrorBoundary {
24
+ /** Runs `step`; a throw is reported and swallowed so the next frame still runs. Returns `undefined` after a throw. */
25
+ run<T>(step: () => T): T | undefined;
26
+ stats(): FrameErrorStats;
27
+ }
28
+ /**
29
+ * Keeps one throwing frame from freezing a game: a failed step is reported with its stack through a stable console code
30
+ * (`FRAME_ERROR`), the loop carries on, and a run of consecutive failures escalates once to `onFatal`.
31
+ */
32
+ export declare function createFrameErrorBoundary(options?: FrameErrorBoundaryOptions): FrameErrorBoundary;
33
+ //# sourceMappingURL=frameBoundary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frameBoundary.d.ts","sourceRoot":"","sources":["../../../../../packages/debug/src/safety/frameBoundary.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,6CAA6C;IAC7C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,+CAA+C;IAC/C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,gDAAgD;IAChD,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,yBAAyB;IACxC,4DAA4D;IAC5D,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,wGAAwG;IACxG,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IAClE,gFAAgF;IAChF,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;CACnE;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,kBAAkB;IACjC,sHAAsH;IACtH,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IACrC,KAAK,IAAI,eAAe,CAAC;CAC1B;AAID;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,GAAE,yBAA8B,GAAG,kBAAkB,CA8BpG"}
@@ -0,0 +1,40 @@
1
+ const messageOf = (error) => (error instanceof Error ? error.message : String(error));
2
+ /**
3
+ * Keeps one throwing frame from freezing a game: a failed step is reported with its stack through a stable console code
4
+ * (`FRAME_ERROR`), the loop carries on, and a run of consecutive failures escalates once to `onFatal`.
5
+ */
6
+ export function createFrameErrorBoundary(options = {}) {
7
+ const maxConsecutive = Math.max(1, options.maxConsecutive ?? 30);
8
+ const seen = new Set();
9
+ let total = 0;
10
+ let consecutive = 0;
11
+ let fatal = false;
12
+ let lastMessage = null;
13
+ return {
14
+ run(step) {
15
+ try {
16
+ const result = step();
17
+ consecutive = 0;
18
+ return result;
19
+ }
20
+ catch (error) {
21
+ total += 1;
22
+ consecutive += 1;
23
+ lastMessage = messageOf(error);
24
+ const info = { consecutive, total, firstOfKind: !seen.has(lastMessage) };
25
+ seen.add(lastMessage);
26
+ if (options.onError)
27
+ options.onError(error, info);
28
+ else if (info.firstOfKind)
29
+ console.error(`FRAME_ERROR: ${lastMessage}`, error instanceof Error ? error.stack : "");
30
+ if (!fatal && consecutive >= maxConsecutive) {
31
+ fatal = true;
32
+ options.onFatal?.(error, info);
33
+ }
34
+ return undefined;
35
+ }
36
+ },
37
+ stats: () => ({ total, consecutive, fatal, lastMessage })
38
+ };
39
+ }
40
+ //# sourceMappingURL=frameBoundary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frameBoundary.js","sourceRoot":"","sources":["../../../../../packages/debug/src/safety/frameBoundary.ts"],"names":[],"mappings":"AA+BA,MAAM,SAAS,GAAG,CAAC,KAAc,EAAU,EAAE,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAEvG;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,UAAqC,EAAE;IAC9E,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;IACjE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,WAAW,GAAkB,IAAI,CAAC;IACtC,OAAO;QACL,GAAG,CAAC,IAAI;YACN,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,EAAE,CAAC;gBACtB,WAAW,GAAG,CAAC,CAAC;gBAChB,OAAO,MAAM,CAAC;YAChB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,KAAK,IAAI,CAAC,CAAC;gBACX,WAAW,IAAI,CAAC,CAAC;gBACjB,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;gBAC/B,MAAM,IAAI,GAAmB,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;gBACzF,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBACtB,IAAI,OAAO,CAAC,OAAO;oBAAE,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;qBAC7C,IAAI,IAAI,CAAC,WAAW;oBAAE,OAAO,CAAC,KAAK,CAAC,gBAAgB,WAAW,EAAE,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACnH,IAAI,CAAC,KAAK,IAAI,WAAW,IAAI,cAAc,EAAE,CAAC;oBAC5C,KAAK,GAAG,IAAI,CAAC;oBACb,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBACjC,CAAC;gBACD,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QACD,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;KAC1D,CAAC;AACJ,CAAC"}
@@ -4,6 +4,7 @@ import { type QualitySwitches } from "./switches.js";
4
4
  export * from "./blackFrame.js";
5
5
  export * from "./guard.js";
6
6
  export * from "./frameTap.js";
7
+ export * from "./frameBoundary.js";
7
8
  export * from "./diagnosticsPanel.js";
8
9
  export * from "./switches.js";
9
10
  export interface SafetyNetOptions {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/debug/src/safety/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6F,KAAK,sBAAsB,EAAE,KAAK,QAAQ,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC/L,OAAO,EAA2B,KAAK,kBAAkB,EAA+B,MAAM,uBAAuB,CAAC;AACtH,OAAO,EAA0B,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAE7E,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAE9B,MAAM,WAAW,gBAAgB;IAC/B,sGAAsG;IACtG,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,cAAc,CAAC;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,GAAG,CAAC,EAAE,kBAAkB,CAAC;IAClC,yEAAyE;IACzE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC;CAC5C;AAED,MAAM,WAAW,cAAc;IAC7B,4FAA4F;IAC5F,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,sBAAsB,EAAE,YAAY,GAAG,WAAW,GAAG,SAAS,GAAG,YAAY,GAAG,UAAU,GAAG,YAAY,GAAG,KAAK,GAAG,SAAS,GAAG,cAAc,GAAG,KAAK,GAAG,UAAU,GAAG,YAAY,GAAG,mBAAmB,GAAG,qBAAqB,GAAG,aAAa,GAAG,eAAe,CAAC,CAAC;CAC3R;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,6HAA6H;IAC7H,QAAQ,CAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CACtC;AAED,MAAM,WAAW,SAAS;IACxB,2FAA2F;IAC3F,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,qEAAqE;IACrE,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,6FAA6F;IAC7F,MAAM,IAAI,YAAY,CAAC;IACvB,OAAO,IAAI,IAAI,CAAC;CACjB;AAID;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,CAsDrE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/debug/src/safety/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6F,KAAK,sBAAsB,EAAE,KAAK,QAAQ,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC/L,OAAO,EAA2B,KAAK,kBAAkB,EAA+B,MAAM,uBAAuB,CAAC;AACtH,OAAO,EAA0B,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAE7E,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAE9B,MAAM,WAAW,gBAAgB;IAC/B,sGAAsG;IACtG,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,cAAc,CAAC;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,GAAG,CAAC,EAAE,kBAAkB,CAAC;IAClC,yEAAyE;IACzE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC;CAC5C;AAED,MAAM,WAAW,cAAc;IAC7B,4FAA4F;IAC5F,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,sBAAsB,EAAE,YAAY,GAAG,WAAW,GAAG,SAAS,GAAG,YAAY,GAAG,UAAU,GAAG,YAAY,GAAG,KAAK,GAAG,SAAS,GAAG,cAAc,GAAG,KAAK,GAAG,UAAU,GAAG,YAAY,GAAG,mBAAmB,GAAG,qBAAqB,GAAG,aAAa,GAAG,eAAe,CAAC,CAAC;CAC3R;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,6HAA6H;IAC7H,QAAQ,CAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CACtC;AAED,MAAM,WAAW,SAAS;IACxB,2FAA2F;IAC3F,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,qEAAqE;IACrE,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,6FAA6F;IAC7F,MAAM,IAAI,YAAY,CAAC;IACvB,OAAO,IAAI,IAAI,CAAC;CACjB;AAID;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,CAsDrE"}