@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.
- package/README.md +52 -730
- package/dist/audio/synth/SynthCueBank.d.ts.map +1 -1
- package/dist/audio/synth/SynthCueBank.js +11 -2
- package/dist/audio/synth/SynthCueBank.js.map +1 -1
- package/dist/audio/synth/types.d.ts +4 -0
- package/dist/audio/synth/types.d.ts.map +1 -1
- package/dist/aura3d-cli/cli.d.ts.map +1 -1
- package/dist/aura3d-cli/cli.js +49 -17
- package/dist/aura3d-cli/cli.js.map +1 -1
- package/dist/aura3d-cli/commands/evidence/index.d.ts +3 -0
- package/dist/aura3d-cli/commands/evidence/index.d.ts.map +1 -0
- package/dist/aura3d-cli/commands/evidence/index.js +12 -0
- package/dist/aura3d-cli/commands/evidence/index.js.map +1 -0
- package/dist/aura3d-cli/commands/evidence/judge.d.ts +18 -0
- package/dist/aura3d-cli/commands/evidence/judge.d.ts.map +1 -0
- package/dist/aura3d-cli/commands/evidence/judge.js +194 -0
- package/dist/aura3d-cli/commands/evidence/judge.js.map +1 -0
- package/dist/aura3d-cli/commands/evidence/judgeLib.d.ts +84 -0
- package/dist/aura3d-cli/commands/evidence/judgeLib.d.ts.map +1 -0
- package/dist/aura3d-cli/commands/evidence/judgeLib.js +178 -0
- package/dist/aura3d-cli/commands/evidence/judgeLib.js.map +1 -0
- package/dist/aura3d-cli/commands/registry.d.ts +1 -0
- package/dist/aura3d-cli/commands/registry.d.ts.map +1 -1
- package/dist/aura3d-cli/commands/registry.js +1 -0
- package/dist/aura3d-cli/commands/registry.js.map +1 -1
- package/dist/aura3d-cli/look/capture.d.ts +15 -7
- package/dist/aura3d-cli/look/capture.d.ts.map +1 -1
- package/dist/aura3d-cli/look/capture.js +85 -13
- package/dist/aura3d-cli/look/capture.js.map +1 -1
- package/dist/aura3d-cli/pull-bridge/adapters.d.ts +9 -1
- package/dist/aura3d-cli/pull-bridge/adapters.d.ts.map +1 -1
- package/dist/aura3d-cli/pull-bridge/adapters.js +30 -7
- package/dist/aura3d-cli/pull-bridge/adapters.js.map +1 -1
- package/dist/aura3d-cli/pull-bridge/search.d.ts +5 -0
- package/dist/aura3d-cli/pull-bridge/search.d.ts.map +1 -1
- package/dist/aura3d-cli/pull-bridge/search.js +7 -1
- package/dist/aura3d-cli/pull-bridge/search.js.map +1 -1
- package/dist/aura3d-cli/pull-bridge.js +1 -1
- package/dist/aura3d-cli/pull-bridge.js.map +1 -1
- package/dist/aura3d-cli/resolve-ladder.d.ts +123 -0
- package/dist/aura3d-cli/resolve-ladder.d.ts.map +1 -0
- package/dist/aura3d-cli/resolve-ladder.js +410 -0
- package/dist/aura3d-cli/resolve-ladder.js.map +1 -0
- package/dist/create-aura3d/index.js +1 -1
- package/dist/debug/index.d.ts +2 -2
- package/dist/debug/index.d.ts.map +1 -1
- package/dist/debug/index.js +1 -1
- package/dist/debug/index.js.map +1 -1
- package/dist/debug/safety/frameBoundary.d.ts +33 -0
- package/dist/debug/safety/frameBoundary.d.ts.map +1 -0
- package/dist/debug/safety/frameBoundary.js +40 -0
- package/dist/debug/safety/frameBoundary.js.map +1 -0
- package/dist/debug/safety/index.d.ts +1 -0
- package/dist/debug/safety/index.d.ts.map +1 -1
- package/dist/debug/safety/index.js +1 -0
- package/dist/debug/safety/index.js.map +1 -1
- package/dist/engine/agent-api/app/actorBoneMatrixLookup.d.ts +22 -0
- package/dist/engine/agent-api/app/actorBoneMatrixLookup.d.ts.map +1 -0
- package/dist/engine/agent-api/app/actorBoneMatrixLookup.js +24 -0
- package/dist/engine/agent-api/app/actorBoneMatrixLookup.js.map +1 -0
- package/dist/engine/agent-api/app/canvas.d.ts +16 -0
- package/dist/engine/agent-api/app/canvas.d.ts.map +1 -1
- package/dist/engine/agent-api/app/canvas.js +15 -0
- package/dist/engine/agent-api/app/canvas.js.map +1 -1
- package/dist/engine/agent-api/app/createAuraApp.d.ts.map +1 -1
- package/dist/engine/agent-api/app/createAuraApp.js +21 -3
- package/dist/engine/agent-api/app/createAuraApp.js.map +1 -1
- package/dist/engine/agent-api/app/frameLoop.d.ts.map +1 -1
- package/dist/engine/agent-api/app/frameLoop.js +21 -3
- package/dist/engine/agent-api/app/frameLoop.js.map +1 -1
- package/dist/engine/agent-api/app/mountFailure.d.ts +6 -0
- package/dist/engine/agent-api/app/mountFailure.d.ts.map +1 -0
- package/dist/engine/agent-api/app/mountFailure.js +9 -0
- package/dist/engine/agent-api/app/mountFailure.js.map +1 -0
- package/dist/engine/agent-api/app/parentFit.d.ts +35 -0
- package/dist/engine/agent-api/app/parentFit.d.ts.map +1 -0
- package/dist/engine/agent-api/app/parentFit.js +36 -0
- package/dist/engine/agent-api/app/parentFit.js.map +1 -0
- package/dist/engine/agent-api/compiler/customMaterial.js +3 -2
- package/dist/engine/agent-api/compiler/customMaterial.js.map +1 -1
- package/dist/engine/agent-api/compiler/geometry.d.ts +13 -0
- package/dist/engine/agent-api/compiler/geometry.d.ts.map +1 -1
- package/dist/engine/agent-api/compiler/geometry.js +30 -3
- package/dist/engine/agent-api/compiler/geometry.js.map +1 -1
- package/dist/engine/agent-api/compiler/primitives.d.ts +1 -2
- package/dist/engine/agent-api/compiler/primitives.d.ts.map +1 -1
- package/dist/engine/agent-api/compiler/primitives.js +21 -4
- package/dist/engine/agent-api/compiler/primitives.js.map +1 -1
- package/dist/engine/agent-api/index.d.ts +4 -0
- package/dist/engine/agent-api/index.d.ts.map +1 -1
- package/dist/engine/agent-api/index.js +1 -0
- package/dist/engine/agent-api/index.js.map +1 -1
- package/dist/engine/agent-api/nodes/batched.d.ts +10 -0
- package/dist/engine/agent-api/nodes/batched.d.ts.map +1 -1
- package/dist/engine/agent-api/nodes/batched.js +7 -5
- package/dist/engine/agent-api/nodes/batched.js.map +1 -1
- package/dist/engine/agent-api/nodes/builder.d.ts +13 -0
- package/dist/engine/agent-api/nodes/builder.d.ts.map +1 -1
- package/dist/engine/agent-api/nodes/builder.js +7 -3
- package/dist/engine/agent-api/nodes/builder.js.map +1 -1
- package/dist/engine/agent-api/nodes/cameras.d.ts +7 -0
- package/dist/engine/agent-api/nodes/cameras.d.ts.map +1 -1
- package/dist/engine/agent-api/nodes/cameras.js +7 -0
- package/dist/engine/agent-api/nodes/cameras.js.map +1 -1
- package/dist/engine/agent-api/nodes/chaseCamera.d.ts +122 -0
- package/dist/engine/agent-api/nodes/chaseCamera.d.ts.map +1 -0
- package/dist/engine/agent-api/nodes/chaseCamera.js +130 -0
- package/dist/engine/agent-api/nodes/chaseCamera.js.map +1 -0
- package/dist/engine/agent-api/nodes/effects.composite.d.ts +1 -0
- package/dist/engine/agent-api/nodes/effects.composite.d.ts.map +1 -1
- package/dist/engine/agent-api/nodes/effects.composite.js +2 -0
- package/dist/engine/agent-api/nodes/effects.composite.js.map +1 -1
- package/dist/engine/agent-api/nodes/effects.toon.d.ts +26 -0
- package/dist/engine/agent-api/nodes/effects.toon.d.ts.map +1 -0
- package/dist/engine/agent-api/nodes/effects.toon.js +70 -0
- package/dist/engine/agent-api/nodes/effects.toon.js.map +1 -0
- package/dist/engine/agent-api/nodes/instancedMesh.d.ts +10 -0
- package/dist/engine/agent-api/nodes/instancedMesh.d.ts.map +1 -1
- package/dist/engine/agent-api/nodes/instancedMesh.js +7 -5
- package/dist/engine/agent-api/nodes/instancedMesh.js.map +1 -1
- package/dist/engine/agent-api/nodes/prefabs/index.d.ts +3 -0
- package/dist/engine/agent-api/nodes/prefabs/index.d.ts.map +1 -1
- package/dist/engine/agent-api/nodes/prefabs/index.js +3 -0
- package/dist/engine/agent-api/nodes/prefabs/index.js.map +1 -1
- package/dist/engine/agent-api/nodes/prefabs/objectiveMarker.d.ts +32 -0
- package/dist/engine/agent-api/nodes/prefabs/objectiveMarker.d.ts.map +1 -0
- package/dist/engine/agent-api/nodes/prefabs/objectiveMarker.js +77 -0
- package/dist/engine/agent-api/nodes/prefabs/objectiveMarker.js.map +1 -0
- package/dist/engine/lanes/prd06.d.ts.map +1 -1
- package/dist/engine/lanes/prd06.js +1 -16
- package/dist/engine/lanes/prd06.js.map +1 -1
- package/dist/engine/production-runtime/actor/ModelTextureShare.d.ts +1 -1
- package/dist/engine/production-runtime/actor/ModelTextureShare.d.ts.map +1 -1
- package/dist/engine/production-runtime/actor/ModelTextureShare.js +1 -1
- package/dist/engine/production-runtime/actor/ModelTextureShare.js.map +1 -1
- package/dist/engine/public/index.d.ts +52 -67
- package/dist/engine/public/index.d.ts.map +1 -1
- package/dist/engine/public/index.js +59 -56
- package/dist/engine/public/index.js.map +1 -1
- package/dist/engine/qa/countedRng.d.ts +2 -0
- package/dist/engine/qa/countedRng.d.ts.map +1 -1
- package/dist/engine/qa/countedRng.js +3 -0
- package/dist/engine/qa/countedRng.js.map +1 -1
- package/dist/engine/qa/fixedStepLoop.d.ts +4 -0
- package/dist/engine/qa/fixedStepLoop.d.ts.map +1 -1
- package/dist/engine/qa/fixedStepLoop.js +6 -0
- package/dist/engine/qa/fixedStepLoop.js.map +1 -1
- package/dist/engine/qa/hooks.js +1 -1
- package/dist/engine/qa/hooks.js.map +1 -1
- package/dist/game/evidence/beacon.d.ts +16 -6
- package/dist/game/evidence/beacon.d.ts.map +1 -1
- package/dist/game/evidence/beacon.js +32 -14
- package/dist/game/evidence/beacon.js.map +1 -1
- package/dist/game/evidence/textureStatus.d.ts +24 -0
- package/dist/game/evidence/textureStatus.d.ts.map +1 -0
- package/dist/game/evidence/textureStatus.js +27 -0
- package/dist/game/evidence/textureStatus.js.map +1 -0
- package/dist/game/hud/canvasMinimap.d.ts +60 -0
- package/dist/game/hud/canvasMinimap.d.ts.map +1 -0
- package/dist/game/hud/canvasMinimap.js +62 -0
- package/dist/game/hud/canvasMinimap.js.map +1 -0
- package/dist/game/hud/compass.d.ts +16 -0
- package/dist/game/hud/compass.d.ts.map +1 -0
- package/dist/game/hud/compass.js +15 -0
- package/dist/game/hud/compass.js.map +1 -0
- package/dist/game/index.d.ts +9 -0
- package/dist/game/index.d.ts.map +1 -1
- package/dist/game/index.js +5 -0
- package/dist/game/index.js.map +1 -1
- package/dist/game/motion/boneAttach.d.ts +42 -0
- package/dist/game/motion/boneAttach.d.ts.map +1 -0
- package/dist/game/motion/boneAttach.js +166 -0
- package/dist/game/motion/boneAttach.js.map +1 -0
- package/dist/game/motion/cameraClear.d.ts +35 -0
- package/dist/game/motion/cameraClear.d.ts.map +1 -0
- package/dist/game/motion/cameraClear.js +64 -0
- package/dist/game/motion/cameraClear.js.map +1 -0
- package/dist/game/motion/doubleFrame.d.ts +37 -0
- package/dist/game/motion/doubleFrame.d.ts.map +1 -0
- package/dist/game/motion/doubleFrame.js +59 -0
- package/dist/game/motion/doubleFrame.js.map +1 -0
- package/dist/game/motion/footSlide.d.ts +32 -0
- package/dist/game/motion/footSlide.d.ts.map +1 -0
- package/dist/game/motion/footSlide.js +59 -0
- package/dist/game/motion/footSlide.js.map +1 -0
- package/dist/game/motion/impact.d.ts +113 -0
- package/dist/game/motion/impact.d.ts.map +1 -0
- package/dist/game/motion/impact.js +233 -0
- package/dist/game/motion/impact.js.map +1 -0
- package/dist/game/motion/index.d.ts +19 -0
- package/dist/game/motion/index.d.ts.map +1 -0
- package/dist/game/motion/index.js +10 -0
- package/dist/game/motion/index.js.map +1 -0
- package/dist/game/motion/locomotion.d.ts +55 -0
- package/dist/game/motion/locomotion.d.ts.map +1 -0
- package/dist/game/motion/locomotion.js +107 -0
- package/dist/game/motion/locomotion.js.map +1 -0
- package/dist/game/motion/motionGate.d.ts +41 -0
- package/dist/game/motion/motionGate.d.ts.map +1 -0
- package/dist/game/motion/motionGate.js +71 -0
- package/dist/game/motion/motionGate.js.map +1 -0
- package/dist/game/motion/presenter.d.ts +37 -0
- package/dist/game/motion/presenter.d.ts.map +1 -0
- package/dist/game/motion/presenter.js +72 -0
- package/dist/game/motion/presenter.js.map +1 -0
- package/dist/game/motion/smoothing.d.ts +34 -0
- package/dist/game/motion/smoothing.d.ts.map +1 -0
- package/dist/game/motion/smoothing.js +92 -0
- package/dist/game/motion/smoothing.js.map +1 -0
- package/dist/game/session/warmPrograms.d.ts +58 -0
- package/dist/game/session/warmPrograms.d.ts.map +1 -0
- package/dist/game/session/warmPrograms.js +63 -0
- package/dist/game/session/warmPrograms.js.map +1 -0
- package/dist/math/Random.d.ts +3 -0
- package/dist/math/Random.d.ts.map +1 -1
- package/dist/math/Random.js +7 -0
- package/dist/math/Random.js.map +1 -1
- package/dist/rendering/WebGL2Device.d.ts.map +1 -1
- package/dist/rendering/WebGL2Device.js +3 -4
- package/dist/rendering/WebGL2Device.js.map +1 -1
- package/dist/rendering/environment/EnvironmentCache.d.ts.map +1 -1
- package/dist/rendering/environment/EnvironmentCache.js +6 -1
- package/dist/rendering/environment/EnvironmentCache.js.map +1 -1
- package/dist/rendering/environment/neutralEmbedded.d.ts +5 -0
- package/dist/rendering/environment/neutralEmbedded.d.ts.map +1 -0
- package/dist/rendering/environment/neutralEmbedded.js +1118 -0
- package/dist/rendering/environment/neutralEmbedded.js.map +1 -0
- package/dist/rendering/environment/neutralEmbeddedLoader.d.ts +5 -0
- package/dist/rendering/environment/neutralEmbeddedLoader.d.ts.map +1 -0
- package/dist/rendering/environment/neutralEmbeddedLoader.js +32 -0
- package/dist/rendering/environment/neutralEmbeddedLoader.js.map +1 -0
- package/dist/rendering/geometry/Primitives.d.ts +4 -1
- package/dist/rendering/geometry/Primitives.d.ts.map +1 -1
- package/dist/rendering/geometry/Primitives.js +5 -1
- package/dist/rendering/geometry/Primitives.js.map +1 -1
- package/dist/rendering/renderer/CullingBatching.d.ts.map +1 -1
- package/dist/rendering/renderer/CullingBatching.js +3 -7
- package/dist/rendering/renderer/CullingBatching.js.map +1 -1
- package/dist/rendering/renderer/InstanceBounds.d.ts +18 -0
- package/dist/rendering/renderer/InstanceBounds.d.ts.map +1 -0
- package/dist/rendering/renderer/InstanceBounds.js +68 -0
- package/dist/rendering/renderer/InstanceBounds.js.map +1 -0
- package/dist/rendering/renderer/RenderShared.d.ts.map +1 -1
- package/dist/rendering/renderer/RenderShared.js +3 -7
- package/dist/rendering/renderer/RenderShared.js.map +1 -1
- package/dist/rendering/shadows/DirectionalCascadeFitter.d.ts.map +1 -1
- package/dist/rendering/shadows/DirectionalCascadeFitter.js +19 -10
- package/dist/rendering/shadows/DirectionalCascadeFitter.js.map +1 -1
- package/dist/rendering/webgl2/LdrPostprocessShader.d.ts +24 -0
- package/dist/rendering/webgl2/LdrPostprocessShader.d.ts.map +1 -0
- package/dist/rendering/webgl2/LdrPostprocessShader.js +233 -0
- package/dist/rendering/webgl2/LdrPostprocessShader.js.map +1 -0
- package/dist/rendering/webgl2/LegacyPost.d.ts +5 -3
- package/dist/rendering/webgl2/LegacyPost.d.ts.map +1 -1
- package/dist/rendering/webgl2/LegacyPost.js +23 -191
- package/dist/rendering/webgl2/LegacyPost.js.map +1 -1
- package/package.json +25 -25
- package/templates/cinematic-scene/package.json +4 -3
- package/templates/mini-game/index.html +3 -1
- package/templates/mini-game/package.json +4 -3
- package/templates/mini-game/public/fonts/graphik/Graphik-Medium-Web.woff2 +0 -0
- package/templates/mini-game/public/fonts/graphik/Graphik-Regular-Web.woff2 +0 -0
- package/templates/mini-game/src/main.ts +1 -1
- package/templates/product-viewer/package.json +4 -3
- package/templates/production-asset-inspector/package.json +1 -1
- package/templates/production-material-studio/package.json +1 -1
- package/templates/production-product-configurator/package.json +1 -1
- 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.
|
|
78
|
+
dependencies["@aura3d/engine"] = options.packageVersion ?? "4.2.0";
|
|
79
79
|
}
|
|
80
80
|
else if (options.packageVersion) {
|
|
81
81
|
for (const dependency of auraDependencies)
|
package/dist/debug/index.d.ts
CHANGED
|
@@ -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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"}
|
package/dist/debug/index.js
CHANGED
|
@@ -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
|
package/dist/debug/index.js.map
CHANGED
|
@@ -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"}
|