@aura3d/engine 4.0.7 → 4.1.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/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 +45 -0
- package/dist/debug/safety/blackFrame.d.ts.map +1 -0
- package/dist/debug/safety/blackFrame.js +109 -0
- package/dist/debug/safety/blackFrame.js.map +1 -0
- package/dist/debug/safety/diagnosticsPanel.d.ts +53 -0
- package/dist/debug/safety/diagnosticsPanel.d.ts.map +1 -0
- package/dist/debug/safety/diagnosticsPanel.js +117 -0
- package/dist/debug/safety/diagnosticsPanel.js.map +1 -0
- package/dist/debug/safety/index.d.ts +47 -0
- package/dist/debug/safety/index.d.ts.map +1 -0
- package/dist/debug/safety/index.js +61 -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/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 +7 -0
- package/dist/engine/agent-api/compiler/customMaterial.d.ts.map +1 -1
- package/dist/engine/agent-api/compiler/customMaterial.js +20 -3
- 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 +12 -3
- package/dist/engine/agent-api/compiler/renderInput.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/sceneMath.d.ts +6 -0
- package/dist/engine/agent-api/sceneMath.d.ts.map +1 -1
- package/dist/engine/agent-api/sceneMath.js +6 -2
- package/dist/engine/agent-api/sceneMath.js.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 +13 -3
- package/dist/rendering/ForwardPass.js.map +1 -1
- package/dist/rendering/MaterialBinding.d.ts.map +1 -1
- package/dist/rendering/MaterialBinding.js +11 -1
- package/dist/rendering/MaterialBinding.js.map +1 -1
- package/dist/rendering/Renderer.d.ts +8 -0
- package/dist/rendering/Renderer.d.ts.map +1 -1
- package/dist/rendering/Renderer.js +7 -0
- package/dist/rendering/Renderer.js.map +1 -1
- package/dist/rendering/ShaderLibrary.js +5 -5
- package/dist/rendering/ShaderLibraryCore.js +1 -1
- package/dist/rendering/WebGPUDevice.js +1 -1
- package/dist/rendering/index.d.ts +1 -0
- package/dist/rendering/index.d.ts.map +1 -1
- package/dist/rendering/index.js +1 -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/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 +33 -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.0
|
|
78
|
+
dependencies["@aura3d/engine"] = options.packageVersion ?? "4.1.0";
|
|
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, createBlackFrameWatch, formatEngineSection, formatGpuProbe, healParams, healRungName, healStage, installDiagnosticsPanel, installSafetyNet, isBlackFrame, probeGpu, resolveQualitySwitches } from "./safety/index.js";
|
|
32
|
+
export type { BlackFrameWatch, BlackFrameWatchOptions, DiagnosticsAppLike, DiagnosticsPanelHandle, DiagnosticsPanelOptions, GpuProbe, 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":"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;AACvD,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,UAAU,EACV,YAAY,EACZ,SAAS,EACT,uBAAuB,EACvB,gBAAgB,EAChB,YAAY,EACZ,QAAQ,EACR,sBAAsB,EACvB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,eAAe,EACf,sBAAsB,EACtB,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,EACvB,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,6BAA6B,EAC7B,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACf,MAAM,mBAAmB,CAAC"}
|
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, createBlackFrameWatch, formatEngineSection, formatGpuProbe, healParams, healRungName, healStage, installDiagnosticsPanel, installSafetyNet, isBlackFrame, probeGpu, 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,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,UAAU,EACV,YAAY,EACZ,SAAS,EACT,uBAAuB,EACvB,gBAAgB,EAChB,YAAY,EACZ,QAAQ,EACR,sBAAsB,EACvB,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
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, so a player still gets a picture and the diagnostics panel shows which
|
|
5
|
+
* rung fixed it. Opt-in only: nothing here runs unless `installSafetyNet` (or `createBlackFrameWatch`) is called.
|
|
6
|
+
*/
|
|
7
|
+
export interface HealRung {
|
|
8
|
+
readonly name: string;
|
|
9
|
+
readonly params: Readonly<Record<string, string>>;
|
|
10
|
+
}
|
|
11
|
+
export declare const DEFAULT_HEAL_LADDER: readonly HealRung[];
|
|
12
|
+
export declare const DEFAULT_HEAL_STORAGE_KEY = "aura3d-safety-heal-stage";
|
|
13
|
+
type StorageLike = Pick<Storage, "getItem" | "setItem">;
|
|
14
|
+
/** Current rung (0 = full quality) from session storage, so a reload continues down the ladder. */
|
|
15
|
+
export declare function healStage(storage?: Pick<Storage, "getItem"> | undefined, ladder?: readonly HealRung[], storageKey?: string): number;
|
|
16
|
+
/** Query parameters implied by rung `stage` (cumulative); callers merge them under the author's explicit parameters. */
|
|
17
|
+
export declare function healParams(stage: number, ladder?: readonly HealRung[]): Record<string, string>;
|
|
18
|
+
export declare function healRungName(stage: number, ladder?: readonly HealRung[]): string;
|
|
19
|
+
/** True when every sampled texel of a downscaled frame is (almost) black. */
|
|
20
|
+
export declare function isBlackFrame(rgba: ArrayLike<number>): boolean;
|
|
21
|
+
export interface BlackFrameWatchOptions {
|
|
22
|
+
readonly enabled: boolean;
|
|
23
|
+
readonly ladder?: readonly HealRung[];
|
|
24
|
+
readonly storageKey?: string;
|
|
25
|
+
/** Shortens the detection window (tests only); production uses 20 frames then 23 consecutive black samples. */
|
|
26
|
+
readonly fastFrames?: number;
|
|
27
|
+
/** Reads a downscaled RGBA probe of the canvas. Defaults to a 16x16 2D canvas copy. */
|
|
28
|
+
readonly readProbe?: (canvas: HTMLCanvasElement) => ArrayLike<number> | undefined;
|
|
29
|
+
readonly storage?: StorageLike;
|
|
30
|
+
readonly currentUrl?: () => string;
|
|
31
|
+
/** Navigates to the next rung. Defaults to `location.replace`. */
|
|
32
|
+
readonly navigate?: (url: string) => void;
|
|
33
|
+
readonly log?: (code: string, message: string) => void;
|
|
34
|
+
}
|
|
35
|
+
export interface BlackFrameWatch {
|
|
36
|
+
/** Call right after a frame was drawn, in the same task (before the browser composites it). */
|
|
37
|
+
sample(framesDrawn: number): void;
|
|
38
|
+
readonly stage: number;
|
|
39
|
+
readonly rung: string;
|
|
40
|
+
/** True once the watch decided to reload one rung down. */
|
|
41
|
+
readonly escalated: boolean;
|
|
42
|
+
}
|
|
43
|
+
export declare function createBlackFrameWatch(canvas: HTMLCanvasElement, options: BlackFrameWatchOptions): BlackFrameWatch;
|
|
44
|
+
export {};
|
|
45
|
+
//# 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":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACnD;AAED,eAAO,MAAM,mBAAmB,EAAE,SAAS,QAAQ,EAOlD,CAAC;AAEF,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AAKnE,KAAK,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC;AAUxD,mGAAmG;AACnG,wBAAgB,SAAS,CACvB,OAAO,GAAE,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,SAAyB,EAC7D,MAAM,GAAE,SAAS,QAAQ,EAAwB,EACjD,UAAU,GAAE,MAAiC,GAC5C,MAAM,CAGR;AAED,wHAAwH;AACxH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,SAAS,QAAQ,EAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAInH;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,SAAS,QAAQ,EAAwB,GAAG,MAAM,CAErG;AAED,6EAA6E;AAC7E,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,OAAO,CAM7D;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;IACtC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,+GAA+G;IAC/G,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,uFAAuF;IACvF,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;IAClF,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,MAAM,CAAC;IACnC,kEAAkE;IAClE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACxD;AAED,MAAM,WAAW,eAAe;IAC9B,+FAA+F;IAC/F,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,2DAA2D;IAC3D,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAiBD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,sBAAsB,GAAG,eAAe,CAwCjH"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
export const DEFAULT_HEAL_LADDER = [
|
|
2
|
+
{ name: "no-aa", params: { aa: "0" } },
|
|
3
|
+
{ name: "no-post", params: { post: "0" } },
|
|
4
|
+
{ name: "aces-tone", params: { tm: "aces" } },
|
|
5
|
+
{ name: "no-env", params: { env: "0" } },
|
|
6
|
+
{ name: "no-shadow", params: { shadow: "0" } },
|
|
7
|
+
{ name: "low-quality", params: { quality: "low", sky: "1" } }
|
|
8
|
+
];
|
|
9
|
+
export const DEFAULT_HEAL_STORAGE_KEY = "aura3d-safety-heal-stage";
|
|
10
|
+
const DEFAULT_FRAMES_NEEDED = 45;
|
|
11
|
+
const BLACK_MAX_CHANNEL = 4;
|
|
12
|
+
const PROBE_SIZE = 16;
|
|
13
|
+
function safeStorage() {
|
|
14
|
+
try {
|
|
15
|
+
return globalThis.sessionStorage;
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/** Current rung (0 = full quality) from session storage, so a reload continues down the ladder. */
|
|
22
|
+
export function healStage(storage = safeStorage(), ladder = DEFAULT_HEAL_LADDER, storageKey = DEFAULT_HEAL_STORAGE_KEY) {
|
|
23
|
+
const raw = Number(storage?.getItem(storageKey) ?? "0");
|
|
24
|
+
return Number.isInteger(raw) && raw >= 0 && raw <= ladder.length ? raw : 0;
|
|
25
|
+
}
|
|
26
|
+
/** Query parameters implied by rung `stage` (cumulative); callers merge them under the author's explicit parameters. */
|
|
27
|
+
export function healParams(stage, ladder = DEFAULT_HEAL_LADDER) {
|
|
28
|
+
const merged = {};
|
|
29
|
+
for (const rung of ladder.slice(0, Math.max(0, stage)))
|
|
30
|
+
Object.assign(merged, rung.params);
|
|
31
|
+
return merged;
|
|
32
|
+
}
|
|
33
|
+
export function healRungName(stage, ladder = DEFAULT_HEAL_LADDER) {
|
|
34
|
+
return stage <= 0 ? "full" : ladder[Math.min(stage, ladder.length) - 1].name;
|
|
35
|
+
}
|
|
36
|
+
/** True when every sampled texel of a downscaled frame is (almost) black. */
|
|
37
|
+
export function isBlackFrame(rgba) {
|
|
38
|
+
if (rgba.length < 4)
|
|
39
|
+
return false;
|
|
40
|
+
for (let i = 0; i + 2 < rgba.length; i += 4) {
|
|
41
|
+
if (rgba[i] > BLACK_MAX_CHANNEL || rgba[i + 1] > BLACK_MAX_CHANNEL || rgba[i + 2] > BLACK_MAX_CHANNEL)
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
function defaultProbe() {
|
|
47
|
+
let ctx;
|
|
48
|
+
return (canvas) => {
|
|
49
|
+
if (ctx === undefined) {
|
|
50
|
+
const probe = document.createElement("canvas");
|
|
51
|
+
probe.width = PROBE_SIZE;
|
|
52
|
+
probe.height = PROBE_SIZE;
|
|
53
|
+
ctx = probe.getContext("2d", { willReadFrequently: true });
|
|
54
|
+
}
|
|
55
|
+
if (!ctx)
|
|
56
|
+
return undefined;
|
|
57
|
+
ctx.drawImage(canvas, 0, 0, PROBE_SIZE, PROBE_SIZE);
|
|
58
|
+
return ctx.getImageData(0, 0, PROBE_SIZE, PROBE_SIZE).data;
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
export function createBlackFrameWatch(canvas, options) {
|
|
62
|
+
const ladder = options.ladder ?? DEFAULT_HEAL_LADDER;
|
|
63
|
+
const storageKey = options.storageKey ?? DEFAULT_HEAL_STORAGE_KEY;
|
|
64
|
+
const storage = options.storage ?? safeStorage();
|
|
65
|
+
const minFrames = options.fastFrames ?? 20;
|
|
66
|
+
const samplesNeeded = Math.max(2, Math.ceil((options.fastFrames ?? DEFAULT_FRAMES_NEEDED) / 2));
|
|
67
|
+
const stage = healStage(storage, ladder, storageKey);
|
|
68
|
+
const readProbe = options.readProbe ?? defaultProbe();
|
|
69
|
+
const log = options.log ?? ((code, message) => console.warn(`${code}: ${message}`));
|
|
70
|
+
const currentUrl = options.currentUrl ?? (() => location.href);
|
|
71
|
+
const navigate = options.navigate ?? ((url) => location.replace(url));
|
|
72
|
+
let consecutive = 0;
|
|
73
|
+
let escalated = false;
|
|
74
|
+
if (stage > 0)
|
|
75
|
+
log("SAFETY_COMPAT_MODE", `rung ${stage} (${healRungName(stage, ladder)}) after a black frame was detected`);
|
|
76
|
+
return {
|
|
77
|
+
stage,
|
|
78
|
+
rung: healRungName(stage, ladder),
|
|
79
|
+
get escalated() {
|
|
80
|
+
return escalated;
|
|
81
|
+
},
|
|
82
|
+
sample(framesDrawn) {
|
|
83
|
+
if (!options.enabled || escalated || framesDrawn < minFrames || framesDrawn % 2 !== 0)
|
|
84
|
+
return;
|
|
85
|
+
let black;
|
|
86
|
+
try {
|
|
87
|
+
const data = readProbe(canvas);
|
|
88
|
+
if (!data)
|
|
89
|
+
return;
|
|
90
|
+
black = isBlackFrame(data);
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
consecutive = black ? consecutive + 1 : 0;
|
|
96
|
+
if (consecutive < samplesNeeded || stage >= ladder.length)
|
|
97
|
+
return;
|
|
98
|
+
escalated = true;
|
|
99
|
+
storage?.setItem(storageKey, String(stage + 1));
|
|
100
|
+
const url = new URL(currentUrl());
|
|
101
|
+
for (const [key, value] of Object.entries(healParams(stage + 1, ladder)))
|
|
102
|
+
if (!url.searchParams.has(key))
|
|
103
|
+
url.searchParams.set(key, value);
|
|
104
|
+
log("SAFETY_BLACK_FRAME", `reloading at rung ${stage + 1} (${healRungName(stage + 1, ladder)})`);
|
|
105
|
+
navigate(url.toString());
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=blackFrame.js.map
|