@aura3d/engine 4.0.8 → 4.1.1
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/dist/audio/index.d.ts +1 -0
- package/dist/audio/index.d.ts.map +1 -1
- package/dist/audio/index.js +1 -0
- package/dist/audio/index.js.map +1 -1
- package/dist/audio/synth/SampleSlices.d.ts +88 -0
- package/dist/audio/synth/SampleSlices.d.ts.map +1 -0
- package/dist/audio/synth/SampleSlices.js +185 -0
- package/dist/audio/synth/SampleSlices.js.map +1 -0
- package/dist/audio/synth/SynthCueBank.d.ts +102 -0
- package/dist/audio/synth/SynthCueBank.d.ts.map +1 -0
- package/dist/audio/synth/SynthCueBank.js +323 -0
- package/dist/audio/synth/SynthCueBank.js.map +1 -0
- package/dist/audio/synth/SynthLoops.d.ts +77 -0
- package/dist/audio/synth/SynthLoops.d.ts.map +1 -0
- package/dist/audio/synth/SynthLoops.js +147 -0
- package/dist/audio/synth/SynthLoops.js.map +1 -0
- package/dist/audio/synth/index.d.ts +9 -0
- package/dist/audio/synth/index.d.ts.map +1 -0
- package/dist/audio/synth/index.js +5 -0
- package/dist/audio/synth/index.js.map +1 -0
- package/dist/audio/synth/notes.d.ts +18 -0
- package/dist/audio/synth/notes.d.ts.map +1 -0
- package/dist/audio/synth/notes.js +35 -0
- package/dist/audio/synth/notes.js.map +1 -0
- package/dist/audio/synth/types.d.ts +84 -0
- package/dist/audio/synth/types.d.ts.map +1 -0
- package/dist/audio/synth/types.js +2 -0
- package/dist/audio/synth/types.js.map +1 -0
- package/dist/aura3d-cli/cli-help.d.ts.map +1 -1
- package/dist/aura3d-cli/cli-help.js +6 -0
- package/dist/aura3d-cli/cli-help.js.map +1 -1
- package/dist/aura3d-cli/cli.js +33 -0
- package/dist/aura3d-cli/cli.js.map +1 -1
- package/dist/aura3d-cli/commands/assets/gltfToolkit.d.ts +25 -0
- package/dist/aura3d-cli/commands/assets/gltfToolkit.d.ts.map +1 -0
- package/dist/aura3d-cli/commands/assets/gltfToolkit.js +59 -0
- package/dist/aura3d-cli/commands/assets/gltfToolkit.js.map +1 -0
- package/dist/aura3d-cli/commands/assets/importMeshy.d.ts +50 -0
- package/dist/aura3d-cli/commands/assets/importMeshy.d.ts.map +1 -0
- package/dist/aura3d-cli/commands/assets/importMeshy.js +112 -0
- package/dist/aura3d-cli/commands/assets/importMeshy.js.map +1 -0
- package/dist/aura3d-cli/commands/assets/index.d.ts +6 -0
- package/dist/aura3d-cli/commands/assets/index.d.ts.map +1 -0
- package/dist/aura3d-cli/commands/assets/index.js +54 -0
- package/dist/aura3d-cli/commands/assets/index.js.map +1 -0
- package/dist/aura3d-cli/commands/assets/mergeClips.d.ts +44 -0
- package/dist/aura3d-cli/commands/assets/mergeClips.d.ts.map +1 -0
- package/dist/aura3d-cli/commands/assets/mergeClips.js +103 -0
- package/dist/aura3d-cli/commands/assets/mergeClips.js.map +1 -0
- package/dist/aura3d-cli/commands/assets/optimize.d.ts +54 -0
- package/dist/aura3d-cli/commands/assets/optimize.d.ts.map +1 -0
- package/dist/aura3d-cli/commands/assets/optimize.js +76 -0
- package/dist/aura3d-cli/commands/assets/optimize.js.map +1 -0
- package/dist/aura3d-cli/commands/assets/optimizeVerb.d.ts +9 -0
- package/dist/aura3d-cli/commands/assets/optimizeVerb.d.ts.map +1 -0
- package/dist/aura3d-cli/commands/assets/optimizeVerb.js +40 -0
- package/dist/aura3d-cli/commands/assets/optimizeVerb.js.map +1 -0
- package/dist/aura3d-cli/commands/meshyLedger.d.ts +103 -0
- package/dist/aura3d-cli/commands/meshyLedger.d.ts.map +1 -0
- package/dist/aura3d-cli/commands/meshyLedger.js +308 -0
- package/dist/aura3d-cli/commands/meshyLedger.js.map +1 -0
- package/dist/aura3d-cli/commands/prd05/index.d.ts.map +1 -1
- package/dist/aura3d-cli/commands/prd05/index.js +8 -2
- package/dist/aura3d-cli/commands/prd05/index.js.map +1 -1
- 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/create-aura3d/index.js +1 -1
- package/dist/debug/index.d.ts +2 -0
- package/dist/debug/index.d.ts.map +1 -1
- package/dist/debug/index.js +1 -0
- package/dist/debug/index.js.map +1 -1
- package/dist/debug/safety/blackFrame.d.ts +119 -0
- package/dist/debug/safety/blackFrame.d.ts.map +1 -0
- package/dist/debug/safety/blackFrame.js +326 -0
- package/dist/debug/safety/blackFrame.js.map +1 -0
- package/dist/debug/safety/diagnosticsPanel.d.ts +70 -0
- package/dist/debug/safety/diagnosticsPanel.d.ts.map +1 -0
- package/dist/debug/safety/diagnosticsPanel.js +123 -0
- package/dist/debug/safety/diagnosticsPanel.js.map +1 -0
- package/dist/debug/safety/guard.d.ts +51 -0
- package/dist/debug/safety/guard.d.ts.map +1 -0
- package/dist/debug/safety/guard.js +64 -0
- package/dist/debug/safety/guard.js.map +1 -0
- package/dist/debug/safety/index.d.ts +50 -0
- package/dist/debug/safety/index.d.ts.map +1 -0
- package/dist/debug/safety/index.js +71 -0
- package/dist/debug/safety/index.js.map +1 -0
- package/dist/debug/safety/switches.d.ts +27 -0
- package/dist/debug/safety/switches.d.ts.map +1 -0
- package/dist/debug/safety/switches.js +23 -0
- package/dist/debug/safety/switches.js.map +1 -0
- package/dist/engine/agent-api/app/createAuraApp.d.ts.map +1 -1
- package/dist/engine/agent-api/app/createAuraApp.js +6 -0
- package/dist/engine/agent-api/app/createAuraApp.js.map +1 -1
- package/dist/engine/agent-api/app/frameLoop.d.ts +1 -1
- package/dist/engine/agent-api/app/frameLoop.d.ts.map +1 -1
- package/dist/engine/agent-api/app/frameLoop.js +8 -1
- package/dist/engine/agent-api/app/frameLoop.js.map +1 -1
- package/dist/engine/agent-api/app/runtimeNodes.d.ts.map +1 -1
- package/dist/engine/agent-api/app/runtimeNodes.js +15 -0
- package/dist/engine/agent-api/app/runtimeNodes.js.map +1 -1
- package/dist/engine/agent-api/assets/productionModels.d.ts +58 -0
- package/dist/engine/agent-api/assets/productionModels.d.ts.map +1 -0
- package/dist/engine/agent-api/assets/productionModels.js +103 -0
- package/dist/engine/agent-api/assets/productionModels.js.map +1 -0
- package/dist/engine/agent-api/compiler/customMaterial.d.ts +12 -0
- package/dist/engine/agent-api/compiler/customMaterial.d.ts.map +1 -1
- package/dist/engine/agent-api/compiler/customMaterial.js +23 -17
- package/dist/engine/agent-api/compiler/customMaterial.js.map +1 -1
- package/dist/engine/agent-api/compiler/errors.d.ts +1 -1
- package/dist/engine/agent-api/compiler/errors.d.ts.map +1 -1
- package/dist/engine/agent-api/compiler/errors.js.map +1 -1
- package/dist/engine/agent-api/compiler/lines.d.ts.map +1 -1
- package/dist/engine/agent-api/compiler/lines.js +10 -1
- package/dist/engine/agent-api/compiler/lines.js.map +1 -1
- package/dist/engine/agent-api/compiler/renderInput.d.ts.map +1 -1
- package/dist/engine/agent-api/compiler/renderInput.js +8 -0
- package/dist/engine/agent-api/compiler/renderInput.js.map +1 -1
- package/dist/engine/agent-api/diagnostics.d.ts +5 -0
- package/dist/engine/agent-api/diagnostics.d.ts.map +1 -1
- package/dist/engine/agent-api/diagnostics.js +15 -1
- package/dist/engine/agent-api/diagnostics.js.map +1 -1
- package/dist/engine/agent-api/game-kits/ballFlight.d.ts +145 -0
- package/dist/engine/agent-api/game-kits/ballFlight.d.ts.map +1 -0
- package/dist/engine/agent-api/game-kits/ballFlight.js +308 -0
- package/dist/engine/agent-api/game-kits/ballFlight.js.map +1 -0
- package/dist/engine/agent-api/game-kits/index.d.ts +9 -5
- package/dist/engine/agent-api/game-kits/index.d.ts.map +1 -1
- package/dist/engine/agent-api/game-kits/index.js +1 -0
- package/dist/engine/agent-api/game-kits/index.js.map +1 -1
- package/dist/engine/agent-api/game-kits/racketAthleteRig.d.ts +107 -0
- package/dist/engine/agent-api/game-kits/racketAthleteRig.d.ts.map +1 -0
- package/dist/engine/agent-api/game-kits/racketAthleteRig.js +178 -0
- package/dist/engine/agent-api/game-kits/racketAthleteRig.js.map +1 -0
- package/dist/engine/agent-api/game-kits/racketGeometry.d.ts +8 -0
- package/dist/engine/agent-api/game-kits/racketGeometry.d.ts.map +1 -0
- package/dist/engine/agent-api/game-kits/racketGeometry.js +73 -0
- package/dist/engine/agent-api/game-kits/racketGeometry.js.map +1 -0
- package/dist/engine/agent-api/game-kits/racketScoring.d.ts +53 -0
- package/dist/engine/agent-api/game-kits/racketScoring.d.ts.map +1 -0
- package/dist/engine/agent-api/game-kits/racketScoring.js +69 -0
- package/dist/engine/agent-api/game-kits/racketScoring.js.map +1 -0
- package/dist/engine/agent-api/game-kits/racketSports.d.ts +20 -6
- package/dist/engine/agent-api/game-kits/racketSports.d.ts.map +1 -1
- package/dist/engine/agent-api/game-kits/racketSports.js +15 -74
- package/dist/engine/agent-api/game-kits/racketSports.js.map +1 -1
- package/dist/engine/agent-api/index.d.ts +7 -0
- package/dist/engine/agent-api/index.d.ts.map +1 -1
- package/dist/engine/agent-api/index.js +5 -0
- package/dist/engine/agent-api/index.js.map +1 -1
- package/dist/engine/agent-api/nodes/batched.d.ts.map +1 -1
- package/dist/engine/agent-api/nodes/batched.js +63 -3
- package/dist/engine/agent-api/nodes/batched.js.map +1 -1
- package/dist/engine/agent-api/nodes/batchedState.d.ts +5 -0
- package/dist/engine/agent-api/nodes/batchedState.d.ts.map +1 -1
- package/dist/engine/agent-api/nodes/batchedState.js +10 -0
- package/dist/engine/agent-api/nodes/batchedState.js.map +1 -1
- package/dist/engine/agent-api/nodes/instances.js +1 -2
- package/dist/engine/agent-api/nodes/instances.js.map +1 -1
- package/dist/engine/agent-api/nodes/lines.d.ts.map +1 -1
- package/dist/engine/agent-api/nodes/lines.js +2 -1
- package/dist/engine/agent-api/nodes/lines.js.map +1 -1
- package/dist/engine/agent-api/nodes/mergeStatic.d.ts +26 -0
- package/dist/engine/agent-api/nodes/mergeStatic.d.ts.map +1 -0
- package/dist/engine/agent-api/nodes/mergeStatic.js +126 -0
- package/dist/engine/agent-api/nodes/mergeStatic.js.map +1 -0
- package/dist/engine/agent-api/nodes/scatter.d.ts +116 -0
- package/dist/engine/agent-api/nodes/scatter.d.ts.map +1 -0
- package/dist/engine/agent-api/nodes/scatter.js +211 -0
- package/dist/engine/agent-api/nodes/scatter.js.map +1 -0
- package/dist/engine/agent-api/nodes/scene.d.ts +9 -1
- package/dist/engine/agent-api/nodes/scene.d.ts.map +1 -1
- package/dist/engine/agent-api/nodes/scene.js +28 -2
- package/dist/engine/agent-api/nodes/scene.js.map +1 -1
- package/dist/engine/agent-api/nodes/types.d.ts +8 -0
- package/dist/engine/agent-api/nodes/types.d.ts.map +1 -1
- package/dist/engine/contracts/stubs/game.d.ts +0 -8
- package/dist/engine/contracts/stubs/game.d.ts.map +1 -1
- package/dist/engine/contracts/stubs/game.js +6 -0
- package/dist/engine/contracts/stubs/game.js.map +1 -1
- package/dist/engine/deprecated/advanced-runtime.js +2 -2
- package/dist/engine/deprecated/apps.js +2 -2
- package/dist/engine/deprecated/assets-browser.js +2 -2
- package/dist/engine/deprecated/contracts.js +2 -2
- package/dist/engine/deprecated/media-node.js +2 -2
- package/dist/engine/deprecated/production-runtime.js +2 -2
- package/dist/engine/deprecated/rendering-production-runtime.js +2 -2
- package/dist/engine/deprecated/rendering-webgpu.js +2 -2
- package/dist/engine/deprecated/rendering.js +2 -2
- package/dist/engine/deprecated/workflows-production.js +2 -2
- package/dist/engine/index.d.ts +1 -0
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js +1 -0
- package/dist/engine/index.js.map +1 -1
- package/dist/engine/instances-model/InstancedModel.d.ts.map +1 -1
- package/dist/engine/instances-model/InstancedModel.js +2 -5
- package/dist/engine/instances-model/InstancedModel.js.map +1 -1
- package/dist/engine/production-runtime/TypedGLBActor.d.ts +6 -0
- package/dist/engine/production-runtime/TypedGLBActor.d.ts.map +1 -1
- package/dist/engine/production-runtime/TypedGLBActor.js +8 -1
- package/dist/engine/production-runtime/TypedGLBActor.js.map +1 -1
- package/dist/engine/production-runtime/actor/ModelTextureShare.d.ts +38 -0
- package/dist/engine/production-runtime/actor/ModelTextureShare.d.ts.map +1 -0
- package/dist/engine/production-runtime/actor/ModelTextureShare.js +65 -0
- package/dist/engine/production-runtime/actor/ModelTextureShare.js.map +1 -0
- package/dist/engine/public/index.d.ts +71 -67
- package/dist/engine/public/index.d.ts.map +1 -1
- package/dist/engine/public/index.js +59 -54
- package/dist/engine/public/index.js.map +1 -1
- package/dist/engine/qa/countedRng.d.ts +16 -0
- package/dist/engine/qa/countedRng.d.ts.map +1 -0
- package/dist/engine/qa/countedRng.js +40 -0
- package/dist/engine/qa/countedRng.js.map +1 -0
- package/dist/engine/qa/fixedStepLoop.d.ts +43 -0
- package/dist/engine/qa/fixedStepLoop.d.ts.map +1 -0
- package/dist/engine/qa/fixedStepLoop.js +83 -0
- package/dist/engine/qa/fixedStepLoop.js.map +1 -0
- package/dist/engine/qa/hooks.d.ts +80 -0
- package/dist/engine/qa/hooks.d.ts.map +1 -0
- package/dist/engine/qa/hooks.js +95 -0
- package/dist/engine/qa/hooks.js.map +1 -0
- package/dist/engine/qa/index.d.ts +10 -0
- package/dist/engine/qa/index.d.ts.map +1 -0
- package/dist/engine/qa/index.js +6 -0
- package/dist/engine/qa/index.js.map +1 -0
- package/dist/engine/qa/params.d.ts +38 -0
- package/dist/engine/qa/params.d.ts.map +1 -0
- package/dist/engine/qa/params.js +35 -0
- package/dist/engine/qa/params.js.map +1 -0
- package/dist/game/capture/captureFromUrl.d.ts +1 -1
- package/dist/game/capture/captureFromUrl.d.ts.map +1 -1
- package/dist/game/capture/index.d.ts +1 -1
- package/dist/game/capture/index.d.ts.map +1 -1
- package/dist/game/components.d.ts +1 -1
- package/dist/game/components.d.ts.map +1 -1
- package/dist/game/createGame.d.ts +1 -1
- package/dist/game/createGame.d.ts.map +1 -1
- package/dist/game/createGame.js +1 -1
- package/dist/game/createGame.js.map +1 -1
- package/dist/game/evidence/beacon.d.ts +1 -1
- package/dist/game/evidence/beacon.d.ts.map +1 -1
- package/dist/game/flagDefault.d.ts +8 -0
- package/dist/game/flagDefault.d.ts.map +1 -0
- package/dist/game/flagDefault.js +28 -0
- package/dist/game/flagDefault.js.map +1 -0
- package/dist/game/index.d.ts +4 -2
- package/dist/game/index.d.ts.map +1 -1
- package/dist/game/index.js +10 -3
- package/dist/game/index.js.map +1 -1
- package/dist/game/input/bindingStore.d.ts +87 -0
- package/dist/game/input/bindingStore.d.ts.map +1 -0
- package/dist/game/input/bindingStore.js +164 -0
- package/dist/game/input/bindingStore.js.map +1 -0
- package/dist/game/session/GameSession.d.ts +2 -2
- package/dist/game/session/GameSession.d.ts.map +1 -1
- package/dist/game/session/GameSession.js +1 -1
- package/dist/game/session/GameSession.js.map +1 -1
- package/dist/rendering/ForwardPass.d.ts +5 -0
- package/dist/rendering/ForwardPass.d.ts.map +1 -1
- package/dist/rendering/ForwardPass.js +75 -2
- package/dist/rendering/ForwardPass.js.map +1 -1
- package/dist/rendering/ShaderFailures.d.ts +77 -0
- package/dist/rendering/ShaderFailures.d.ts.map +1 -0
- package/dist/rendering/ShaderFailures.js +141 -0
- package/dist/rendering/ShaderFailures.js.map +1 -0
- package/dist/rendering/ShaderLibrary.js +5 -5
- package/dist/rendering/ShaderLibraryCore.js +1 -1
- package/dist/rendering/WebGL2Device.js +1 -1
- package/dist/rendering/WebGL2Device.js.map +1 -1
- package/dist/rendering/WebGPUDevice.js +1 -1
- package/dist/rendering/index.d.ts +2 -0
- package/dist/rendering/index.d.ts.map +1 -1
- package/dist/rendering/index.js +2 -0
- package/dist/rendering/index.js.map +1 -1
- package/dist/rendering/output/ToneMappingOperators.glsl.d.ts +1 -1
- package/dist/rendering/output/ToneMappingOperators.glsl.d.ts.map +1 -1
- package/dist/rendering/output/ToneMappingOperators.glsl.js +2 -0
- package/dist/rendering/output/ToneMappingOperators.glsl.js.map +1 -1
- package/dist/rendering/post/v2Stages.d.ts.map +1 -1
- package/dist/rendering/post/v2Stages.js +4 -0
- package/dist/rendering/post/v2Stages.js.map +1 -1
- package/dist/rendering/program/chunks/shadow_forward.glsl.d.ts +2 -2
- package/dist/rendering/program/chunks/shadow_forward.glsl.d.ts.map +1 -1
- package/dist/rendering/program/chunks/shadow_forward.glsl.js +1 -1
- package/dist/rendering/shaders/chunks/author/colorspace.glsl.d.ts +8 -0
- package/dist/rendering/shaders/chunks/author/colorspace.glsl.d.ts.map +1 -0
- package/dist/rendering/shaders/chunks/author/colorspace.glsl.js +20 -0
- package/dist/rendering/shaders/chunks/author/colorspace.glsl.js.map +1 -0
- package/dist/rendering/shaders/chunks/author/fog.glsl.d.ts +3 -0
- package/dist/rendering/shaders/chunks/author/fog.glsl.d.ts.map +1 -0
- package/dist/rendering/shaders/chunks/author/fog.glsl.js +18 -0
- package/dist/rendering/shaders/chunks/author/fog.glsl.js.map +1 -0
- package/dist/rendering/shaders/chunks/author/index.d.ts +16 -0
- package/dist/rendering/shaders/chunks/author/index.d.ts.map +1 -0
- package/dist/rendering/shaders/chunks/author/index.js +77 -0
- package/dist/rendering/shaders/chunks/author/index.js.map +1 -0
- package/dist/rendering/shaders/chunks/author/math.glsl.d.ts +3 -0
- package/dist/rendering/shaders/chunks/author/math.glsl.d.ts.map +1 -0
- package/dist/rendering/shaders/chunks/author/math.glsl.js +43 -0
- package/dist/rendering/shaders/chunks/author/math.glsl.js.map +1 -0
- package/dist/rendering/shaders/chunks/author/noise.glsl.d.ts +3 -0
- package/dist/rendering/shaders/chunks/author/noise.glsl.d.ts.map +1 -0
- package/dist/rendering/shaders/chunks/author/noise.glsl.js +94 -0
- package/dist/rendering/shaders/chunks/author/noise.glsl.js.map +1 -0
- package/dist/rendering/shaders/chunks/author/sky.glsl.d.ts +3 -0
- package/dist/rendering/shaders/chunks/author/sky.glsl.d.ts.map +1 -0
- package/dist/rendering/shaders/chunks/author/sky.glsl.js +28 -0
- package/dist/rendering/shaders/chunks/author/sky.glsl.js.map +1 -0
- package/dist/rendering/shaders/chunks/author/toon.glsl.d.ts +3 -0
- package/dist/rendering/shaders/chunks/author/toon.glsl.d.ts.map +1 -0
- package/dist/rendering/shaders/chunks/author/toon.glsl.js +21 -0
- package/dist/rendering/shaders/chunks/author/toon.glsl.js.map +1 -0
- package/dist/rendering/shaders/chunks/author/triplanar.glsl.d.ts +3 -0
- package/dist/rendering/shaders/chunks/author/triplanar.glsl.d.ts.map +1 -0
- package/dist/rendering/shaders/chunks/author/triplanar.glsl.js +14 -0
- package/dist/rendering/shaders/chunks/author/triplanar.glsl.js.map +1 -0
- package/dist/rendering/webgl2/LegacyPost.d.ts.map +1 -1
- package/dist/rendering/webgl2/LegacyPost.js +3 -2
- package/dist/rendering/webgl2/LegacyPost.js.map +1 -1
- package/package.json +29 -26
- package/templates/cinematic-scene/package.json +2 -2
- package/templates/mini-game/package.json +2 -2
- package/templates/product-viewer/package.json +2 -2
- 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,308 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `aura3d meshy ledger` — a local credit ledger for paid Meshy generation.
|
|
3
|
+
*
|
|
4
|
+
* Bookkeeping only: this module never talks to Meshy and never reads, prints or stores a credential. A wrapper that
|
|
5
|
+
* calls Meshy (for example through Kiro Prism) reserves credits here BEFORE a paid call and settles the record after.
|
|
6
|
+
* Per-game caps and one global cap are enforced under a lock, so many agents or shells can share one ledger.
|
|
7
|
+
*
|
|
8
|
+
* Lessons baked in:
|
|
9
|
+
* - A rate-limited or timed-out poll does not mean the task failed: the task usually finishes and is charged.
|
|
10
|
+
* Such a call settles as `unconfirmed` and keeps counting its estimate until `reconcile` proves otherwise.
|
|
11
|
+
* - Only a confirmed no-charge outcome (auth/validation/credit errors, a FAILED task) settles as `failed` (counts 0).
|
|
12
|
+
* - Every record carries a required game/project tag, and `prefixedName` makes raw download names game-prefixed so
|
|
13
|
+
* two games cannot silently reuse each other's `rocks.raw.glb`.
|
|
14
|
+
*/
|
|
15
|
+
import { appendFileSync, existsSync, mkdirSync, readFileSync, rmSync, statSync, writeFileSync } from "node:fs";
|
|
16
|
+
import { homedir } from "node:os";
|
|
17
|
+
import { dirname, resolve } from "node:path";
|
|
18
|
+
/** Meshy's published per-operation credit costs (preview 20, refine 10, remesh 5, rigging 5, animate 3, retexture 10). */
|
|
19
|
+
export const MESHY_CREDIT_ESTIMATES = {
|
|
20
|
+
preview: 20,
|
|
21
|
+
refine: 10,
|
|
22
|
+
remesh: 5,
|
|
23
|
+
rigging: 5,
|
|
24
|
+
animate: 3,
|
|
25
|
+
retexture: 10
|
|
26
|
+
};
|
|
27
|
+
export const DEFAULT_MESHY_GLOBAL_CAP = 1000;
|
|
28
|
+
const GAME_TAG = /^[a-z][a-z0-9-]{1,39}$/;
|
|
29
|
+
const STALE_LOCK_MS = 60_000;
|
|
30
|
+
export class MeshyLedgerError extends Error {
|
|
31
|
+
code;
|
|
32
|
+
constructor(code, message) {
|
|
33
|
+
super(message);
|
|
34
|
+
this.code = code;
|
|
35
|
+
this.name = "MeshyLedgerError";
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export function defaultLedgerPath() {
|
|
39
|
+
return process.env.AURA3D_MESHY_LEDGER ?? resolve(homedir(), ".aura3d", "meshy-ledger.jsonl");
|
|
40
|
+
}
|
|
41
|
+
function resolveOptions(options) {
|
|
42
|
+
const envCap = Number(process.env.AURA3D_MESHY_GLOBAL_CAP);
|
|
43
|
+
return {
|
|
44
|
+
ledgerPath: resolve(options.ledgerPath ?? defaultLedgerPath()),
|
|
45
|
+
globalCap: options.globalCap ?? (Number.isFinite(envCap) && envCap > 0 ? envCap : DEFAULT_MESHY_GLOBAL_CAP),
|
|
46
|
+
lockTimeoutMs: options.lockTimeoutMs ?? 30_000,
|
|
47
|
+
now: options.now ?? (() => new Date())
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
export function assertGameTag(game) {
|
|
51
|
+
if (!GAME_TAG.test(game)) {
|
|
52
|
+
throw new MeshyLedgerError("BAD_GAME_TAG", `Meshy ledger needs a game/project tag like "drift" or "last-train" (lowercase letters, digits, dashes; got "${game}").`);
|
|
53
|
+
}
|
|
54
|
+
return game;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Raw Meshy downloads must carry the game tag so two games never share `rocks.raw.glb`.
|
|
58
|
+
* `prefixedName("drift", "lamp")` -> `drift-lamp`; an already-prefixed name is returned unchanged.
|
|
59
|
+
*/
|
|
60
|
+
export function prefixedName(game, name) {
|
|
61
|
+
assertGameTag(game);
|
|
62
|
+
if (!/^[A-Za-z][A-Za-z0-9_-]*$/.test(name))
|
|
63
|
+
throw new MeshyLedgerError("BAD_RECORD", `Asset name "${name}" must start with a letter and use letters, digits, "-" or "_".`);
|
|
64
|
+
return name === game || name.startsWith(`${game}-`) || name.startsWith(`${game}_`) ? name : `${game}-${name}`;
|
|
65
|
+
}
|
|
66
|
+
function sleepSync(ms) {
|
|
67
|
+
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
|
|
68
|
+
}
|
|
69
|
+
function pidAlive(pid) {
|
|
70
|
+
try {
|
|
71
|
+
process.kill(pid, 0);
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
return error.code === "EPERM";
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function withLock(resolved, fn) {
|
|
79
|
+
mkdirSync(dirname(resolved.ledgerPath), { recursive: true });
|
|
80
|
+
const lock = `${resolved.ledgerPath}.lock.d`;
|
|
81
|
+
const started = Date.now();
|
|
82
|
+
for (;;) {
|
|
83
|
+
try {
|
|
84
|
+
mkdirSync(lock);
|
|
85
|
+
writeFileSync(`${lock}/pid`, String(process.pid));
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
if (error.code !== "EEXIST")
|
|
90
|
+
throw error;
|
|
91
|
+
let stale = false;
|
|
92
|
+
try {
|
|
93
|
+
const owner = Number(readFileSync(`${lock}/pid`, "utf8"));
|
|
94
|
+
stale = !Number.isFinite(owner) || !pidAlive(owner) || Date.now() - statSync(lock).mtimeMs > STALE_LOCK_MS;
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
// pid file not written yet (owner is between mkdir and writeFile) or the lock was just released
|
|
98
|
+
const info = statSync(lock, { throwIfNoEntry: false });
|
|
99
|
+
if (!info)
|
|
100
|
+
continue;
|
|
101
|
+
stale = Date.now() - info.mtimeMs > 2_000;
|
|
102
|
+
}
|
|
103
|
+
if (stale) {
|
|
104
|
+
rmSync(lock, { recursive: true, force: true });
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
if (Date.now() - started > resolved.lockTimeoutMs)
|
|
108
|
+
throw new MeshyLedgerError("LOCK_TIMEOUT", `Meshy ledger lock ${lock} is held by another process.`);
|
|
109
|
+
sleepSync(50 + Math.floor(Math.random() * 100));
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
try {
|
|
113
|
+
return fn();
|
|
114
|
+
}
|
|
115
|
+
finally {
|
|
116
|
+
rmSync(lock, { recursive: true, force: true });
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
export function readMeshyLedger(options = {}) {
|
|
120
|
+
const { ledgerPath } = resolveOptions(options);
|
|
121
|
+
if (!existsSync(ledgerPath))
|
|
122
|
+
return [];
|
|
123
|
+
return readFileSync(ledgerPath, "utf8")
|
|
124
|
+
.split("\n")
|
|
125
|
+
.filter(Boolean)
|
|
126
|
+
.map((line) => JSON.parse(line));
|
|
127
|
+
}
|
|
128
|
+
/** Latest record per reservation id wins (fields merge). failed counts 0; reserved/unconfirmed/ok count actual ?? est. */
|
|
129
|
+
export function meshyLedgerTotals(records) {
|
|
130
|
+
const byRid = new Map();
|
|
131
|
+
for (const record of records)
|
|
132
|
+
byRid.set(record.rid, { ...(byRid.get(record.rid) ?? {}), ...record });
|
|
133
|
+
let spent = 0;
|
|
134
|
+
let unconfirmed = 0;
|
|
135
|
+
const byGame = {};
|
|
136
|
+
const unconfirmedRids = [];
|
|
137
|
+
for (const record of byRid.values()) {
|
|
138
|
+
const cost = record.status === "failed" ? 0 : record.actual ?? record.est ?? 0;
|
|
139
|
+
spent += cost;
|
|
140
|
+
if (record.game)
|
|
141
|
+
byGame[record.game] = (byGame[record.game] ?? 0) + cost;
|
|
142
|
+
if (record.status === "unconfirmed") {
|
|
143
|
+
unconfirmed += cost;
|
|
144
|
+
unconfirmedRids.push(record.rid);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return { spent, unconfirmed, byGame, unconfirmedRids };
|
|
148
|
+
}
|
|
149
|
+
/** Reserve credits before a paid call. Throws MeshyLedgerError (CAP_GLOBAL / CAP_GAME) without writing when over a cap. */
|
|
150
|
+
export function reserveMeshyCredits(input, options = {}) {
|
|
151
|
+
const resolved = resolveOptions(options);
|
|
152
|
+
const game = assertGameTag(input.game);
|
|
153
|
+
const est = input.est ?? MESHY_CREDIT_ESTIMATES[input.op];
|
|
154
|
+
if (est === undefined || !Number.isFinite(est) || est < 0)
|
|
155
|
+
throw new MeshyLedgerError("BAD_RECORD", `No credit estimate for op "${input.op}"; pass an explicit estimate.`);
|
|
156
|
+
if (!Number.isFinite(input.cap) || input.cap <= 0)
|
|
157
|
+
throw new MeshyLedgerError("BAD_RECORD", "A positive per-game cap is required.");
|
|
158
|
+
return withLock(resolved, () => {
|
|
159
|
+
const totals = meshyLedgerTotals(readMeshyLedger(resolved));
|
|
160
|
+
const gameSpent = totals.byGame[game] ?? 0;
|
|
161
|
+
if (totals.spent + est > resolved.globalCap) {
|
|
162
|
+
throw new MeshyLedgerError("CAP_GLOBAL", `REFUSED: global cap ${resolved.globalCap} would be exceeded (spent ${totals.spent}, need ${est}).`);
|
|
163
|
+
}
|
|
164
|
+
if (gameSpent + est > input.cap) {
|
|
165
|
+
throw new MeshyLedgerError("CAP_GAME", `REFUSED: ${game} cap ${input.cap} would be exceeded (spent ${gameSpent}, need ${est}).`);
|
|
166
|
+
}
|
|
167
|
+
const rid = `${resolved.now().getTime()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
168
|
+
const record = { ts: resolved.now().toISOString(), rid, game, op: input.op, est, status: "reserved" };
|
|
169
|
+
appendFileSync(resolved.ledgerPath, JSON.stringify(record) + "\n");
|
|
170
|
+
return rid;
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
const ALLOWED = {
|
|
174
|
+
reserved: ["ok", "failed", "unconfirmed"],
|
|
175
|
+
unconfirmed: ["ok", "failed", "unconfirmed"],
|
|
176
|
+
ok: ["ok"],
|
|
177
|
+
failed: ["failed"]
|
|
178
|
+
};
|
|
179
|
+
/** Settle (or later reconcile) a reservation. `failed` is final; `ok` only accepts a corrected actual. */
|
|
180
|
+
export function settleMeshyCredits(rid, input, options = {}) {
|
|
181
|
+
const resolved = resolveOptions(options);
|
|
182
|
+
return withLock(resolved, () => {
|
|
183
|
+
const records = readMeshyLedger(resolved).filter((record) => record.rid === rid);
|
|
184
|
+
if (records.length === 0)
|
|
185
|
+
throw new MeshyLedgerError("UNKNOWN_RID", `Unknown reservation ${rid}.`);
|
|
186
|
+
const current = records.reduce((merged, record) => ({ ...merged, ...record }), records[0]);
|
|
187
|
+
if (!ALLOWED[current.status].includes(input.status)) {
|
|
188
|
+
throw new MeshyLedgerError("BAD_TRANSITION", `Reservation ${rid} is ${current.status}; it cannot become ${input.status}.`);
|
|
189
|
+
}
|
|
190
|
+
const next = {
|
|
191
|
+
ts: resolved.now().toISOString(),
|
|
192
|
+
rid,
|
|
193
|
+
status: input.status,
|
|
194
|
+
...(input.task_id ? { task_id: input.task_id } : {}),
|
|
195
|
+
...(input.actual !== undefined ? { actual: input.actual } : {}),
|
|
196
|
+
...(input.note ? { note: input.note } : {})
|
|
197
|
+
};
|
|
198
|
+
appendFileSync(resolved.ledgerPath, JSON.stringify(next) + "\n");
|
|
199
|
+
return { ...current, ...next };
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Decide how a finished Meshy call settles. A rate limit or timeout without a confirmed result is NOT a failure:
|
|
204
|
+
* the task may already be charged, so it stays `unconfirmed` (counted) until a `get` confirms it.
|
|
205
|
+
*/
|
|
206
|
+
export function classifyMeshyOutcome(outcome) {
|
|
207
|
+
const taskStatus = outcome.taskStatus?.toUpperCase();
|
|
208
|
+
if (taskStatus === "FAILED" || taskStatus === "CANCELED")
|
|
209
|
+
return { status: "failed", task_id: outcome.taskId, note: `task ${taskStatus}` };
|
|
210
|
+
if (taskStatus === "SUCCEEDED")
|
|
211
|
+
return { status: "ok", task_id: outcome.taskId };
|
|
212
|
+
if (outcome.exitCode === 0)
|
|
213
|
+
return { status: "ok", task_id: outcome.taskId };
|
|
214
|
+
if (outcome.taskId)
|
|
215
|
+
return { status: "unconfirmed", task_id: outcome.taskId, note: `exit ${outcome.exitCode}; task exists, resume with get before paying again` };
|
|
216
|
+
if ([3, 4, 9].includes(outcome.exitCode))
|
|
217
|
+
return { status: "failed", note: `exit ${outcome.exitCode}: rejected before a task was created` };
|
|
218
|
+
return { status: "unconfirmed", note: `exit ${outcome.exitCode}: no task id seen (rate limit or timeout); verify before treating as failed` };
|
|
219
|
+
}
|
|
220
|
+
export function summarizeMeshyLedger(options = {}) {
|
|
221
|
+
const resolved = resolveOptions(options);
|
|
222
|
+
const totals = meshyLedgerTotals(readMeshyLedger(resolved));
|
|
223
|
+
return { globalCap: resolved.globalCap, spent: totals.spent, left: resolved.globalCap - totals.spent, unconfirmed: totals.unconfirmed, unconfirmedRids: totals.unconfirmedRids, byGame: totals.byGame };
|
|
224
|
+
}
|
|
225
|
+
function flag(argv, name) {
|
|
226
|
+
const index = argv.indexOf(name);
|
|
227
|
+
const value = index >= 0 ? argv[index + 1] : undefined;
|
|
228
|
+
return value && !value.startsWith("--") ? value : undefined;
|
|
229
|
+
}
|
|
230
|
+
const LEDGER_USAGE = "aura3d meshy ledger status|reserve|settle|reconcile|list [--ledger path] [--global-cap N]\n" +
|
|
231
|
+
" reserve --game <tag> --op preview|refine|remesh|rigging|animate|retexture [--est N] --cap N (prints the reservation id)\n" +
|
|
232
|
+
" settle --rid <id> --status ok|failed|unconfirmed [--task-id T] [--actual N] [--note text]\n" +
|
|
233
|
+
" settle --rid <id> --exit-code N [--task-id T] [--task-status SUCCEEDED|FAILED|...] (classified: a rate limit stays unconfirmed)\n" +
|
|
234
|
+
" reconcile --rid <id> --status ok|failed [--task-id T] [--actual N]\n" +
|
|
235
|
+
" list [--game <tag>]";
|
|
236
|
+
export async function meshyLedgerCommand(argv, io) {
|
|
237
|
+
const sub = argv[0];
|
|
238
|
+
const capFlag = flag(argv, "--global-cap");
|
|
239
|
+
const options = {
|
|
240
|
+
...(flag(argv, "--ledger") ? { ledgerPath: resolve(io.cwd, flag(argv, "--ledger")) } : {}),
|
|
241
|
+
...(capFlag ? { globalCap: Number(capFlag) } : {})
|
|
242
|
+
};
|
|
243
|
+
try {
|
|
244
|
+
if (sub === "status" || sub === undefined) {
|
|
245
|
+
io.stdout(JSON.stringify(summarizeMeshyLedger(options)));
|
|
246
|
+
return 0;
|
|
247
|
+
}
|
|
248
|
+
if (sub === "reserve") {
|
|
249
|
+
const game = flag(argv, "--game");
|
|
250
|
+
const op = flag(argv, "--op");
|
|
251
|
+
const cap = Number(flag(argv, "--cap"));
|
|
252
|
+
if (!game || !op || !Number.isFinite(cap)) {
|
|
253
|
+
io.stderr(LEDGER_USAGE);
|
|
254
|
+
return 2;
|
|
255
|
+
}
|
|
256
|
+
const est = flag(argv, "--est");
|
|
257
|
+
io.stdout(reserveMeshyCredits({ game, op, cap, ...(est ? { est: Number(est) } : {}) }, options));
|
|
258
|
+
return 0;
|
|
259
|
+
}
|
|
260
|
+
if (sub === "settle" || sub === "reconcile") {
|
|
261
|
+
const rid = flag(argv, "--rid");
|
|
262
|
+
if (!rid) {
|
|
263
|
+
io.stderr(LEDGER_USAGE);
|
|
264
|
+
return 2;
|
|
265
|
+
}
|
|
266
|
+
const taskId = flag(argv, "--task-id");
|
|
267
|
+
const exitCode = flag(argv, "--exit-code");
|
|
268
|
+
const status = flag(argv, "--status");
|
|
269
|
+
let input;
|
|
270
|
+
if (sub === "settle" && exitCode !== undefined) {
|
|
271
|
+
input = classifyMeshyOutcome({ exitCode: Number(exitCode), ...(taskId ? { taskId } : {}), ...(flag(argv, "--task-status") ? { taskStatus: flag(argv, "--task-status") } : {}) });
|
|
272
|
+
}
|
|
273
|
+
else if (status === "ok" || status === "failed" || status === "unconfirmed") {
|
|
274
|
+
if (sub === "reconcile" && status === "unconfirmed") {
|
|
275
|
+
io.stderr("reconcile settles an unconfirmed reservation to ok or failed.");
|
|
276
|
+
return 2;
|
|
277
|
+
}
|
|
278
|
+
input = { status, ...(taskId ? { task_id: taskId } : {}), ...(flag(argv, "--actual") ? { actual: Number(flag(argv, "--actual")) } : {}), ...(flag(argv, "--note") ? { note: flag(argv, "--note") } : {}) };
|
|
279
|
+
}
|
|
280
|
+
else {
|
|
281
|
+
io.stderr(LEDGER_USAGE);
|
|
282
|
+
return 2;
|
|
283
|
+
}
|
|
284
|
+
io.stdout(JSON.stringify(settleMeshyCredits(rid, input, options)));
|
|
285
|
+
return 0;
|
|
286
|
+
}
|
|
287
|
+
if (sub === "list") {
|
|
288
|
+
const game = flag(argv, "--game");
|
|
289
|
+
const merged = new Map();
|
|
290
|
+
for (const record of readMeshyLedger(options))
|
|
291
|
+
merged.set(record.rid, { ...(merged.get(record.rid) ?? {}), ...record });
|
|
292
|
+
for (const record of merged.values())
|
|
293
|
+
if (!game || record.game === game)
|
|
294
|
+
io.stdout(JSON.stringify(record));
|
|
295
|
+
return 0;
|
|
296
|
+
}
|
|
297
|
+
io.stderr(LEDGER_USAGE);
|
|
298
|
+
return 2;
|
|
299
|
+
}
|
|
300
|
+
catch (error) {
|
|
301
|
+
if (error instanceof MeshyLedgerError) {
|
|
302
|
+
io.stderr(error.message);
|
|
303
|
+
return error.code === "CAP_GLOBAL" || error.code === "CAP_GAME" ? 3 : 1;
|
|
304
|
+
}
|
|
305
|
+
throw error;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
//# sourceMappingURL=meshyLedger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meshyLedger.js","sourceRoot":"","sources":["../../../../../packages/aura3d-cli/src/commands/meshyLedger.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/aura3d-cli/src/commands/prd05/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/aura3d-cli/src/commands/prd05/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAwKH,OAAO,EAAE,CAAC"}
|
|
@@ -9,6 +9,7 @@ import { registerCliCommand, registerCodemod } from "../../contracts/commands.js
|
|
|
9
9
|
import { admitAsset, admitAssetMeasured } from "./admit.js";
|
|
10
10
|
import { dispatchLookdevRun } from "./lookdev.js";
|
|
11
11
|
import { optimizeAssetsVerb } from "./optimize.js";
|
|
12
|
+
import { optimizeFileVerb } from "../assets/optimizeVerb.js";
|
|
12
13
|
import { reviewAsset } from "./review.js";
|
|
13
14
|
import { assetsLibraryVerb } from "./library.js";
|
|
14
15
|
import { assetsPrune } from "./prune.js";
|
|
@@ -120,8 +121,13 @@ registerCliCommand({
|
|
|
120
121
|
name: "assets optimize",
|
|
121
122
|
owner: "prd05",
|
|
122
123
|
summary: "Optimize assets through the §6.3 step pipeline (tools/asset-optimize).",
|
|
123
|
-
usage: "aura3d assets optimize <id...> [--profile <id>] [--geometry meshopt|draco|none] [--dry-run] [--allow-local-small] [--ktx <path>] [--report <file>] [--out-dir <dir>] [--no-manifest]",
|
|
124
|
-
run: async (argv, io) =>
|
|
124
|
+
usage: "aura3d assets optimize --file in.glb --out out.glb [--role hero|vehicle|character|prop|background] [--max-verts N] [--tex N] [--no-simplify] [--meshopt] [--json] | aura3d assets optimize <id...> [--profile <id>] [--geometry meshopt|draco|none] [--dry-run] [--allow-local-small] [--ktx <path>] [--report <file>] [--out-dir <dir>] [--no-manifest]",
|
|
125
|
+
run: async (argv, io) => {
|
|
126
|
+
// Direct-file mode: `assets optimize --file in.glb --out out.glb [--role ...]` (no manifest, no admission pipeline).
|
|
127
|
+
if (readFlag(argv, "--file") !== undefined)
|
|
128
|
+
return optimizeFileVerb(argv, io);
|
|
129
|
+
return optimizeAssetsVerb({ projectDir: io.cwd, argv, stdout: io.stdout, stderr: io.stderr });
|
|
130
|
+
},
|
|
125
131
|
});
|
|
126
132
|
registerCliCommand({
|
|
127
133
|
name: "assets lookdev",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/aura3d-cli/src/commands/prd05/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/aura3d-cli/src/commands/prd05/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../../packages/aura3d-cli/src/commands/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../../packages/aura3d-cli/src/commands/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,mBAAmB,CAAC;AAE3B,OAAO,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../../../packages/aura3d-cli/src/commands/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../../../packages/aura3d-cli/src/commands/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,mBAAmB,CAAC;AAE3B,OAAO,EAAE,CAAC"}
|
|
@@ -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.1.1";
|
|
79
79
|
}
|
|
80
80
|
else if (options.packageVersion) {
|
|
81
81
|
for (const dependency of auraDependencies)
|
package/dist/debug/index.d.ts
CHANGED
|
@@ -28,4 +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, installSafetyNet, isBlackFrame, probeGpu, qrHealRungName, qrHealStage, qrHealUrl, resolveQualitySwitches } from "./safety/index.js";
|
|
32
|
+
export type { BlackFrameGuardOptions, BlackFrameWatch, BlackFrameWatchOptions, DiagnosticsAppLike, DiagnosticsPanelHandle, DiagnosticsPanelOptions, GpuProbe, HealGlobal, HealRung, QualitySwitches, ResolveQualitySwitchesOptions, SafetyNet, SafetyNetOptions, SafetyReport, SafetySettings } from "./safety/index.js";
|
|
31
33
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/debug/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACvF,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACxG,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAClF,YAAY,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACxF,YAAY,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,YAAY,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACtH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,mBAAmB,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACxG,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC1E,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACpG,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,YAAY,EAAE,8BAA8B,EAAE,2BAA2B,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACjI,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,2BAA2B,EAC3B,eAAe,EACf,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,iBAAiB,EACjB,mBAAmB,EACnB,0BAA0B,EAC1B,UAAU,EACV,SAAS,EACT,6BAA6B,EAC7B,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC"}
|
|
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,4 +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, installSafetyNet, isBlackFrame, probeGpu, qrHealRungName, qrHealStage, qrHealUrl, resolveQualitySwitches } from "./safety/index.js";
|
|
16
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"}
|
|
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,gBAAgB,EAChB,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,WAAW,EACX,SAAS,EACT,sBAAsB,EACvB,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Black-frame self-heal. Some GPU/driver combinations present a frame that is entirely black while the engine reports
|
|
3
|
+
* draw calls. When that persists the page reloads itself one rung down a compatibility ladder (each rung switches off
|
|
4
|
+
* one more optional stage) and records the rung and why, so a player still gets a picture and the diagnostics panel
|
|
5
|
+
* shows which rung fixed it. Opt-in only: nothing here runs unless `installSafetyNet`, `installBlackFrameGuard` or
|
|
6
|
+
* `createBlackFrameWatch` is called.
|
|
7
|
+
*
|
|
8
|
+
* The watch is deliberately conservative. A frame counts as broken only when (almost) every sampled texel of the world
|
|
9
|
+
* canvas is the clear colour, the app is ready (document loaded, no loading overlay, no asset fetches in flight, the
|
|
10
|
+
* engine drew something), it has rendered a minimum number of frames since becoming ready, and the canvas stayed that
|
|
11
|
+
* way for several consecutive samples over a time budget that grows with the measured frame time. A dark but valid
|
|
12
|
+
* scene, a slow first frame on a CPU renderer or a page that is still loading never trips it.
|
|
13
|
+
*/
|
|
14
|
+
export interface HealRung {
|
|
15
|
+
readonly name: string;
|
|
16
|
+
readonly params: Readonly<Record<string, string>>;
|
|
17
|
+
}
|
|
18
|
+
export declare const DEFAULT_HEAL_LADDER: readonly HealRung[];
|
|
19
|
+
export declare const DEFAULT_HEAL_STORAGE_KEY = "aura3d-safety-heal-stage";
|
|
20
|
+
type StorageLike = Pick<Storage, "getItem" | "setItem">;
|
|
21
|
+
/** Current rung (0 = full quality) from session storage, so a reload continues down the ladder. */
|
|
22
|
+
export declare function healStage(storage?: Pick<Storage, "getItem"> | undefined, ladder?: readonly HealRung[], storageKey?: string): number;
|
|
23
|
+
/** Query parameters implied by rung `stage` (cumulative); callers merge them under the author's explicit parameters. */
|
|
24
|
+
export declare function healParams(stage: number, ladder?: readonly HealRung[]): Record<string, string>;
|
|
25
|
+
export declare function healRungName(stage: number, ladder?: readonly HealRung[]): string;
|
|
26
|
+
export interface FrameStats {
|
|
27
|
+
readonly samples: number;
|
|
28
|
+
/** Samples with any colour channel above the black threshold. */
|
|
29
|
+
readonly lit: number;
|
|
30
|
+
readonly litFraction: number;
|
|
31
|
+
/** Largest colour channel seen (0..255). */
|
|
32
|
+
readonly max: number;
|
|
33
|
+
/** Mean of the RGB channels (0..255). */
|
|
34
|
+
readonly mean: number;
|
|
35
|
+
}
|
|
36
|
+
/** Statistics of a downscaled RGBA probe of the canvas. */
|
|
37
|
+
export declare function analyseFrame(rgba: ArrayLike<number>, maxChannel?: number): FrameStats;
|
|
38
|
+
/**
|
|
39
|
+
* True when the sampled frame is black: every texel by default; pass a small `maxLitFraction` to tolerate a few stray lit
|
|
40
|
+
* texels (for example a HUD drawn into the same canvas). Empty input is never black.
|
|
41
|
+
*/
|
|
42
|
+
export declare function isBlackFrame(rgba: ArrayLike<number>, maxLitFraction?: number): boolean;
|
|
43
|
+
/** True while a visible loading overlay is on the page (`#boot`, `#loading`, `.loading`, `[aria-busy=true]` ...). */
|
|
44
|
+
export declare function hasVisibleLoadingOverlay(root?: Pick<Document, "querySelectorAll"> | undefined): boolean;
|
|
45
|
+
/** Default readiness: document fully loaded, no asset fetches in flight, no visible loading overlay. */
|
|
46
|
+
export declare function defaultIsReady(): boolean;
|
|
47
|
+
/** Largest canvas big enough to be the world view, ignoring minimap/HUD/overlay canvases. */
|
|
48
|
+
export declare function findWorldCanvas(root?: Pick<Document, "querySelectorAll"> | undefined): HTMLCanvasElement | null;
|
|
49
|
+
export interface WatchObservation {
|
|
50
|
+
/** `sample()` calls so far (frames the app drew while the watch was installed). */
|
|
51
|
+
readonly calls: number;
|
|
52
|
+
/** Call index at which the app first counted as ready, or null while it is not. */
|
|
53
|
+
readonly readyAtCall: number | null;
|
|
54
|
+
readonly framesSinceReady: number;
|
|
55
|
+
readonly samples: number;
|
|
56
|
+
readonly blackSamples: number;
|
|
57
|
+
readonly consecutiveBlack: number;
|
|
58
|
+
/** True once lit frames were seen for long enough that the watch relaxed to occasional sampling. */
|
|
59
|
+
readonly healthy: boolean;
|
|
60
|
+
readonly lastStats: FrameStats | undefined;
|
|
61
|
+
readonly medianFrameMs: number;
|
|
62
|
+
/** How long the canvas has stayed black (ms), 0 when it is not. */
|
|
63
|
+
readonly blackMs: number;
|
|
64
|
+
readonly skipped: {
|
|
65
|
+
readonly notReady: number;
|
|
66
|
+
readonly noDrawCalls: number;
|
|
67
|
+
readonly hidden: number;
|
|
68
|
+
};
|
|
69
|
+
readonly escalated: boolean;
|
|
70
|
+
/** Why the watch reloaded this page (set on escalation) or why the previous page did (from session storage). */
|
|
71
|
+
readonly reason: string | undefined;
|
|
72
|
+
}
|
|
73
|
+
export interface BlackFrameWatchOptions {
|
|
74
|
+
readonly enabled: boolean;
|
|
75
|
+
readonly ladder?: readonly HealRung[];
|
|
76
|
+
readonly storageKey?: string;
|
|
77
|
+
/** Shortens every window (tests only): minimum frames after ready, no minimum black time, samples needed = half of it. */
|
|
78
|
+
readonly fastFrames?: number;
|
|
79
|
+
/** Reads a downscaled RGBA probe of the canvas. Defaults to a nearest-neighbour 2D canvas copy. */
|
|
80
|
+
readonly readProbe?: (canvas: HTMLCanvasElement) => ArrayLike<number> | undefined;
|
|
81
|
+
readonly storage?: StorageLike;
|
|
82
|
+
readonly currentUrl?: () => string;
|
|
83
|
+
/** Navigates to the next rung. Defaults to `location.replace`. */
|
|
84
|
+
readonly navigate?: (url: string) => void;
|
|
85
|
+
readonly log?: (code: string, message: string) => void;
|
|
86
|
+
/** Extra readiness signal (for example the app's own `ready` flag). The default checks overlays, load state and fetches. */
|
|
87
|
+
readonly isReady?: () => boolean;
|
|
88
|
+
/** Engine draw calls for the current frame; when given and not > 0 the frame is not judged (nothing was drawn). */
|
|
89
|
+
readonly getDrawCalls?: () => number | undefined;
|
|
90
|
+
/** Builds the reload URL for rung `stage`, or null to stop. Default merges the rung parameters under the existing query. */
|
|
91
|
+
readonly buildUrl?: (stage: number, currentUrl: string) => string | null;
|
|
92
|
+
/** Clock in ms (tests). Defaults to `performance.now()`. */
|
|
93
|
+
readonly now?: () => number;
|
|
94
|
+
/** Treat the page as hidden (tests). Defaults to `document.hidden`. */
|
|
95
|
+
readonly isHidden?: () => boolean;
|
|
96
|
+
/** Minimum black duration in ms; the effective window is `max(minBlackMs, medianFrameMs * blackFramesBudget)`. Default 4000. */
|
|
97
|
+
readonly minBlackMs?: number;
|
|
98
|
+
/** Frames' worth of measured frame time black must persist for. Default 40. */
|
|
99
|
+
readonly blackFramesBudget?: number;
|
|
100
|
+
/** Rendered frames required after becoming ready before judging. Default 30. */
|
|
101
|
+
readonly minFramesAfterReady?: number;
|
|
102
|
+
/** Judge every Nth frame. Default 4. */
|
|
103
|
+
readonly sampleEvery?: number;
|
|
104
|
+
/** Consecutive black samples required. Default 12. */
|
|
105
|
+
readonly samplesNeeded?: number;
|
|
106
|
+
}
|
|
107
|
+
export interface BlackFrameWatch {
|
|
108
|
+
/** Call right after a frame was drawn, in the same task (before the browser composites it). The argument is unused and kept for compatibility. */
|
|
109
|
+
sample(framesDrawn?: number): void;
|
|
110
|
+
readonly stage: number;
|
|
111
|
+
readonly rung: string;
|
|
112
|
+
/** True once the watch decided to reload one rung down. */
|
|
113
|
+
readonly escalated: boolean;
|
|
114
|
+
/** What the watch has seen so far (also why the previous page reloaded, if it did). */
|
|
115
|
+
observation(): WatchObservation;
|
|
116
|
+
}
|
|
117
|
+
export declare function createBlackFrameWatch(canvas: HTMLCanvasElement | (() => HTMLCanvasElement | null | undefined), options: BlackFrameWatchOptions): BlackFrameWatch;
|
|
118
|
+
export {};
|
|
119
|
+
//# sourceMappingURL=blackFrame.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blackFrame.d.ts","sourceRoot":"","sources":["../../../../../packages/debug/src/safety/blackFrame.ts"],"names":[],"mappings":"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"}
|