@aura3d/cli 3.0.1 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/admission/artDirection.d.ts +28 -0
- package/dist/admission/artDirection.d.ts.map +1 -0
- package/dist/admission/artDirection.js +47 -0
- package/dist/admission/artDirection.js.map +1 -0
- package/dist/admission/audio.d.ts +19 -0
- package/dist/admission/audio.d.ts.map +1 -0
- package/dist/admission/audio.js +31 -0
- package/dist/admission/audio.js.map +1 -0
- package/dist/admission/builder-patterns.d.ts +25 -0
- package/dist/admission/builder-patterns.d.ts.map +1 -0
- package/dist/admission/builder-patterns.js +40 -0
- package/dist/admission/builder-patterns.js.map +1 -0
- package/dist/admission/gates.d.ts +136 -0
- package/dist/admission/gates.d.ts.map +1 -0
- package/dist/admission/gates.js +335 -0
- package/dist/admission/gates.js.map +1 -0
- package/dist/admission/glb.d.ts +64 -0
- package/dist/admission/glb.d.ts.map +1 -0
- package/dist/admission/glb.js +128 -0
- package/dist/admission/glb.js.map +1 -0
- package/dist/admission/index.d.ts +8 -0
- package/dist/admission/index.d.ts.map +1 -0
- package/dist/admission/index.js +8 -0
- package/dist/admission/index.js.map +1 -0
- package/dist/admission/profiles.d.ts +52 -0
- package/dist/admission/profiles.d.ts.map +1 -0
- package/dist/admission/profiles.js +91 -0
- package/dist/admission/profiles.js.map +1 -0
- package/dist/admission/qrFlags.d.ts +12 -0
- package/dist/admission/qrFlags.d.ts.map +1 -0
- package/dist/admission/qrFlags.js +48 -0
- package/dist/admission/qrFlags.js.map +1 -0
- package/dist/admission/routeGates.d.ts +36 -0
- package/dist/admission/routeGates.d.ts.map +1 -0
- package/dist/admission/routeGates.js +144 -0
- package/dist/admission/routeGates.js.map +1 -0
- package/dist/admission/texel.d.ts +50 -0
- package/dist/admission/texel.d.ts.map +1 -0
- package/dist/admission/texel.js +177 -0
- package/dist/admission/texel.js.map +1 -0
- package/dist/admission/textureStats.d.ts +45 -0
- package/dist/admission/textureStats.d.ts.map +1 -0
- package/dist/admission/textureStats.js +201 -0
- package/dist/admission/textureStats.js.map +1 -0
- package/dist/animation-asset-validator.d.ts +44 -0
- package/dist/animation-asset-validator.d.ts.map +1 -1
- package/dist/animation-asset-validator.js +80 -1
- package/dist/animation-asset-validator.js.map +1 -1
- package/dist/asset-core-types.d.ts +99 -4
- package/dist/asset-core-types.d.ts.map +1 -1
- package/dist/asset-inspection-types.d.ts +8 -0
- package/dist/asset-inspection-types.d.ts.map +1 -1
- package/dist/asset-manifest.d.ts +1 -0
- package/dist/asset-manifest.d.ts.map +1 -1
- package/dist/asset-manifest.js +13 -4
- package/dist/asset-manifest.js.map +1 -1
- package/dist/asset-route-typegen.d.ts +37 -0
- package/dist/asset-route-typegen.d.ts.map +1 -0
- package/dist/asset-route-typegen.js +179 -0
- package/dist/asset-route-typegen.js.map +1 -0
- package/dist/cli-help.d.ts +1 -1
- package/dist/cli-help.d.ts.map +1 -1
- package/dist/cli-help.js +9 -4
- package/dist/cli-help.js.map +1 -1
- package/dist/cli-options.d.ts +7 -0
- package/dist/cli-options.d.ts.map +1 -1
- package/dist/cli-options.js +33 -2
- package/dist/cli-options.js.map +1 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +126 -11
- package/dist/cli.js.map +1 -1
- package/dist/codemods/engine-entry-imports.d.ts +22 -0
- package/dist/codemods/engine-entry-imports.d.ts.map +1 -0
- package/dist/codemods/engine-entry-imports.js +159 -0
- package/dist/codemods/engine-entry-imports.js.map +1 -0
- package/dist/codemods/lean-imports.d.ts +40 -0
- package/dist/codemods/lean-imports.d.ts.map +1 -0
- package/dist/codemods/lean-imports.js +175 -0
- package/dist/codemods/lean-imports.js.map +1 -0
- package/dist/codemods/renderer-imports.d.ts +36 -0
- package/dist/codemods/renderer-imports.d.ts.map +1 -0
- package/dist/codemods/renderer-imports.js +364 -0
- package/dist/codemods/renderer-imports.js.map +1 -0
- package/dist/codemods/renderer-mode.d.ts +38 -0
- package/dist/codemods/renderer-mode.d.ts.map +1 -0
- package/dist/codemods/renderer-mode.js +130 -0
- package/dist/codemods/renderer-mode.js.map +1 -0
- package/dist/commands/prd01/index.d.ts +8 -0
- package/dist/commands/prd01/index.d.ts.map +1 -0
- package/dist/commands/prd01/index.js +39 -0
- package/dist/commands/prd01/index.js.map +1 -0
- package/dist/commands/prd02/environmentsBake.d.ts +6 -0
- package/dist/commands/prd02/environmentsBake.d.ts.map +1 -0
- package/dist/commands/prd02/environmentsBake.js +174 -0
- package/dist/commands/prd02/environmentsBake.js.map +1 -0
- package/dist/commands/prd02/index.d.ts +2 -0
- package/dist/commands/prd02/index.d.ts.map +1 -0
- package/dist/commands/prd02/index.js +26 -0
- package/dist/commands/prd02/index.js.map +1 -0
- package/dist/commands/prd02/migrateLighting.d.ts +17 -0
- package/dist/commands/prd02/migrateLighting.d.ts.map +1 -0
- package/dist/commands/prd02/migrateLighting.js +86 -0
- package/dist/commands/prd02/migrateLighting.js.map +1 -0
- package/dist/commands/prd02/migrateLightingSweep.d.ts +20 -0
- package/dist/commands/prd02/migrateLightingSweep.d.ts.map +1 -0
- package/dist/commands/prd02/migrateLightingSweep.js +105 -0
- package/dist/commands/prd02/migrateLightingSweep.js.map +1 -0
- package/dist/commands/prd03/index.d.ts +7 -0
- package/dist/commands/prd03/index.d.ts.map +1 -0
- package/dist/commands/prd03/index.js +9 -0
- package/dist/commands/prd03/index.js.map +1 -0
- package/dist/commands/prd04/index.d.ts +10 -0
- package/dist/commands/prd04/index.d.ts.map +1 -0
- package/dist/commands/prd04/index.js +10 -0
- package/dist/commands/prd04/index.js.map +1 -0
- package/dist/commands/prd04/modelTintReport.d.ts +16 -0
- package/dist/commands/prd04/modelTintReport.d.ts.map +1 -0
- package/dist/commands/prd04/modelTintReport.js +114 -0
- package/dist/commands/prd04/modelTintReport.js.map +1 -0
- package/dist/commands/prd04/pinEmissiveDefaults.d.ts +3 -0
- package/dist/commands/prd04/pinEmissiveDefaults.d.ts.map +1 -0
- package/dist/commands/prd04/pinEmissiveDefaults.js +36 -0
- package/dist/commands/prd04/pinEmissiveDefaults.js.map +1 -0
- package/dist/commands/prd05/admit.d.ts +54 -0
- package/dist/commands/prd05/admit.d.ts.map +1 -0
- package/dist/commands/prd05/admit.js +153 -0
- package/dist/commands/prd05/admit.js.map +1 -0
- package/dist/commands/prd05/codemods/assetsRouteModules.d.ts +3 -0
- package/dist/commands/prd05/codemods/assetsRouteModules.d.ts.map +1 -0
- package/dist/commands/prd05/codemods/assetsRouteModules.js +92 -0
- package/dist/commands/prd05/codemods/assetsRouteModules.js.map +1 -0
- package/dist/commands/prd05/index.d.ts +9 -0
- package/dist/commands/prd05/index.d.ts.map +1 -0
- package/dist/commands/prd05/index.js +171 -0
- package/dist/commands/prd05/index.js.map +1 -0
- package/dist/commands/prd05/library.d.ts +23 -0
- package/dist/commands/prd05/library.d.ts.map +1 -0
- package/dist/commands/prd05/library.js +245 -0
- package/dist/commands/prd05/library.js.map +1 -0
- package/dist/commands/prd05/lookdev.d.ts +14 -0
- package/dist/commands/prd05/lookdev.d.ts.map +1 -0
- package/dist/commands/prd05/lookdev.js +68 -0
- package/dist/commands/prd05/lookdev.js.map +1 -0
- package/dist/commands/prd05/optimize.d.ts +16 -0
- package/dist/commands/prd05/optimize.d.ts.map +1 -0
- package/dist/commands/prd05/optimize.js +55 -0
- package/dist/commands/prd05/optimize.js.map +1 -0
- package/dist/commands/prd05/prune.d.ts +26 -0
- package/dist/commands/prd05/prune.d.ts.map +1 -0
- package/dist/commands/prd05/prune.js +104 -0
- package/dist/commands/prd05/prune.js.map +1 -0
- package/dist/commands/prd05/review.d.ts +24 -0
- package/dist/commands/prd05/review.d.ts.map +1 -0
- package/dist/commands/prd05/review.js +40 -0
- package/dist/commands/prd05/review.js.map +1 -0
- package/dist/commands/prd06/index.d.ts +6 -0
- package/dist/commands/prd06/index.d.ts.map +1 -0
- package/dist/commands/prd06/index.js +86 -0
- package/dist/commands/prd06/index.js.map +1 -0
- package/dist/commands/prd06/inspectAnimationClips.d.ts +86 -0
- package/dist/commands/prd06/inspectAnimationClips.d.ts.map +1 -0
- package/dist/commands/prd06/inspectAnimationClips.js +168 -0
- package/dist/commands/prd06/inspectAnimationClips.js.map +1 -0
- package/dist/commands/prd06/validateHero.d.ts +18 -0
- package/dist/commands/prd06/validateHero.d.ts.map +1 -0
- package/dist/commands/prd06/validateHero.js +91 -0
- package/dist/commands/prd06/validateHero.js.map +1 -0
- package/dist/commands/prd07/codemods.d.ts +28 -0
- package/dist/commands/prd07/codemods.d.ts.map +1 -0
- package/dist/commands/prd07/codemods.js +155 -0
- package/dist/commands/prd07/codemods.js.map +1 -0
- package/dist/commands/prd07/index.d.ts +2 -0
- package/dist/commands/prd07/index.d.ts.map +1 -0
- package/dist/commands/prd07/index.js +151 -0
- package/dist/commands/prd07/index.js.map +1 -0
- package/dist/commands/prd08/feelLint.d.ts +13 -0
- package/dist/commands/prd08/feelLint.d.ts.map +1 -0
- package/dist/commands/prd08/feelLint.js +32 -0
- package/dist/commands/prd08/feelLint.js.map +1 -0
- package/dist/commands/prd08/index.d.ts +2 -0
- package/dist/commands/prd08/index.d.ts.map +1 -0
- package/dist/commands/prd08/index.js +16 -0
- package/dist/commands/prd08/index.js.map +1 -0
- package/dist/commands/prd08/motionReport.d.ts +94 -0
- package/dist/commands/prd08/motionReport.d.ts.map +1 -0
- package/dist/commands/prd08/motionReport.js +197 -0
- package/dist/commands/prd08/motionReport.js.map +1 -0
- package/dist/commands/prd09/codemods/audio-wrapper.d.ts +9 -0
- package/dist/commands/prd09/codemods/audio-wrapper.d.ts.map +1 -0
- package/dist/commands/prd09/codemods/audio-wrapper.js +30 -0
- package/dist/commands/prd09/codemods/audio-wrapper.js.map +1 -0
- package/dist/commands/prd09/codemods/capture-branches.d.ts +10 -0
- package/dist/commands/prd09/codemods/capture-branches.d.ts.map +1 -0
- package/dist/commands/prd09/codemods/capture-branches.js +54 -0
- package/dist/commands/prd09/codemods/capture-branches.js.map +1 -0
- package/dist/commands/prd09/codemods/evidence-globals.d.ts +8 -0
- package/dist/commands/prd09/codemods/evidence-globals.d.ts.map +1 -0
- package/dist/commands/prd09/codemods/evidence-globals.js +19 -0
- package/dist/commands/prd09/codemods/evidence-globals.js.map +1 -0
- package/dist/commands/prd09/codemods/perf-script.d.ts +8 -0
- package/dist/commands/prd09/codemods/perf-script.d.ts.map +1 -0
- package/dist/commands/prd09/codemods/perf-script.js +24 -0
- package/dist/commands/prd09/codemods/perf-script.js.map +1 -0
- package/dist/commands/prd09/index.d.ts +8 -0
- package/dist/commands/prd09/index.d.ts.map +1 -0
- package/dist/commands/prd09/index.js +19 -0
- package/dist/commands/prd09/index.js.map +1 -0
- package/dist/commands/prd09/perf-report.d.ts +56 -0
- package/dist/commands/prd09/perf-report.d.ts.map +1 -0
- package/dist/commands/prd09/perf-report.js +118 -0
- package/dist/commands/prd09/perf-report.js.map +1 -0
- package/dist/commands/prd09/sfx-admit.d.ts +18 -0
- package/dist/commands/prd09/sfx-admit.d.ts.map +1 -0
- package/dist/commands/prd09/sfx-admit.js +120 -0
- package/dist/commands/prd09/sfx-admit.js.map +1 -0
- package/dist/commands/prd10/index.d.ts +2 -0
- package/dist/commands/prd10/index.d.ts.map +1 -0
- package/dist/commands/prd10/index.js +109 -0
- package/dist/commands/prd10/index.js.map +1 -0
- package/dist/commands/prd11/batchOptout.d.ts +35 -0
- package/dist/commands/prd11/batchOptout.d.ts.map +1 -0
- package/dist/commands/prd11/batchOptout.js +155 -0
- package/dist/commands/prd11/batchOptout.js.map +1 -0
- package/dist/commands/prd11/index.d.ts +2 -0
- package/dist/commands/prd11/index.d.ts.map +1 -0
- package/dist/commands/prd11/index.js +13 -0
- package/dist/commands/prd11/index.js.map +1 -0
- package/dist/commands/prd11/perfGate.d.ts +15 -0
- package/dist/commands/prd11/perfGate.d.ts.map +1 -0
- package/dist/commands/prd11/perfGate.js +98 -0
- package/dist/commands/prd11/perfGate.js.map +1 -0
- package/dist/commands/prd13/index.d.ts +15 -0
- package/dist/commands/prd13/index.d.ts.map +1 -0
- package/dist/commands/prd13/index.js +26 -0
- package/dist/commands/prd13/index.js.map +1 -0
- package/dist/commands/prd13/run.d.ts +10 -0
- package/dist/commands/prd13/run.d.ts.map +1 -0
- package/dist/commands/prd13/run.js +29 -0
- package/dist/commands/prd13/run.js.map +1 -0
- package/dist/commands/prd14/index.d.ts +6 -0
- package/dist/commands/prd14/index.d.ts.map +1 -0
- package/dist/commands/prd14/index.js +6 -0
- package/dist/commands/prd14/index.js.map +1 -0
- package/dist/commands/prd15/index.d.ts +8 -0
- package/dist/commands/prd15/index.d.ts.map +1 -0
- package/dist/commands/prd15/index.js +152 -0
- package/dist/commands/prd15/index.js.map +1 -0
- package/dist/commands/registry.d.ts +19 -0
- package/dist/commands/registry.d.ts.map +1 -0
- package/dist/commands/registry.js +19 -0
- package/dist/commands/registry.js.map +1 -0
- package/dist/contracts/assetManifest.d.ts +80 -0
- package/dist/contracts/assetManifest.d.ts.map +1 -0
- package/dist/contracts/assetManifest.js +9 -0
- package/dist/contracts/assetManifest.js.map +1 -0
- package/dist/contracts/commands.d.ts +53 -0
- package/dist/contracts/commands.d.ts.map +1 -0
- package/dist/contracts/commands.js +37 -0
- package/dist/contracts/commands.js.map +1 -0
- package/dist/index.d.ts +17 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +271 -71
- package/dist/index.js.map +1 -1
- package/dist/library-manifest.d.ts +86 -0
- package/dist/library-manifest.d.ts.map +1 -0
- package/dist/library-manifest.js +95 -0
- package/dist/library-manifest.js.map +1 -0
- package/dist/look/capture.d.ts +51 -0
- package/dist/look/capture.d.ts.map +1 -0
- package/dist/look/capture.js +229 -0
- package/dist/look/capture.js.map +1 -0
- package/dist/look/judge.d.ts +24 -0
- package/dist/look/judge.d.ts.map +1 -0
- package/dist/look/judge.js +151 -0
- package/dist/look/judge.js.map +1 -0
- package/dist/look/lint-static.d.ts +45 -0
- package/dist/look/lint-static.d.ts.map +1 -0
- package/dist/look/lint-static.js +241 -0
- package/dist/look/lint-static.js.map +1 -0
- package/dist/look/rubric.d.ts +70 -0
- package/dist/look/rubric.d.ts.map +1 -0
- package/dist/look/rubric.js +169 -0
- package/dist/look/rubric.js.map +1 -0
- package/dist/meshy/import.d.ts +7 -1
- package/dist/meshy/import.d.ts.map +1 -1
- package/dist/meshy/import.js +80 -6
- package/dist/meshy/import.js.map +1 -1
- package/dist/migrate-three/CompatibilityWarnings.d.ts +6 -0
- package/dist/migrate-three/CompatibilityWarnings.d.ts.map +1 -0
- package/dist/migrate-three/CompatibilityWarnings.js +24 -0
- package/dist/migrate-three/CompatibilityWarnings.js.map +1 -0
- package/dist/migrate-three/ImportMap.d.ts +19 -0
- package/dist/migrate-three/ImportMap.d.ts.map +1 -0
- package/dist/migrate-three/ImportMap.js +35 -0
- package/dist/migrate-three/ImportMap.js.map +1 -0
- package/dist/migrate-three/R3fMigration.d.ts +32 -0
- package/dist/migrate-three/R3fMigration.d.ts.map +1 -0
- package/dist/migrate-three/R3fMigration.js +70 -0
- package/dist/migrate-three/R3fMigration.js.map +1 -0
- package/dist/migrate-three/ThreeToA3DAdapter.d.ts +8 -0
- package/dist/migrate-three/ThreeToA3DAdapter.d.ts.map +1 -0
- package/dist/migrate-three/ThreeToA3DAdapter.js +20 -0
- package/dist/migrate-three/ThreeToA3DAdapter.js.map +1 -0
- package/dist/migrate-three/emit.d.ts +21 -0
- package/dist/migrate-three/emit.d.ts.map +1 -0
- package/dist/migrate-three/emit.js +117 -0
- package/dist/migrate-three/emit.js.map +1 -0
- package/dist/migrate-three/mappings.d.ts +21 -0
- package/dist/migrate-three/mappings.d.ts.map +1 -0
- package/dist/migrate-three/mappings.js +42 -0
- package/dist/migrate-three/mappings.js.map +1 -0
- package/dist/migrate-three/parse.d.ts +20 -0
- package/dist/migrate-three/parse.d.ts.map +1 -0
- package/dist/migrate-three/parse.js +56 -0
- package/dist/migrate-three/parse.js.map +1 -0
- package/dist/migrate-three/report.d.ts +18 -0
- package/dist/migrate-three/report.d.ts.map +1 -0
- package/dist/migrate-three/report.js +16 -0
- package/dist/migrate-three/report.js.map +1 -0
- package/dist/pull-bridge/adapters.d.ts +1 -1
- package/dist/pull-bridge/adapters.d.ts.map +1 -1
- package/dist/pull-bridge/adapters.js +17 -4
- package/dist/pull-bridge/adapters.js.map +1 -1
- package/dist/pull-bridge/provenance.d.ts.map +1 -1
- package/dist/pull-bridge/provenance.js +3 -2
- package/dist/pull-bridge/provenance.js.map +1 -1
- package/dist/pull-bridge/pullable.d.ts.map +1 -1
- package/dist/pull-bridge/pullable.js +14 -3
- package/dist/pull-bridge/pullable.js.map +1 -1
- package/dist/pull-bridge/scoring.d.ts +36 -8
- package/dist/pull-bridge/scoring.d.ts.map +1 -1
- package/dist/pull-bridge/scoring.js +143 -47
- package/dist/pull-bridge/scoring.js.map +1 -1
- package/dist/pull-bridge/search.d.ts +2 -0
- package/dist/pull-bridge/search.d.ts.map +1 -1
- package/dist/pull-bridge/search.js +17 -10
- package/dist/pull-bridge/search.js.map +1 -1
- package/dist/pull-bridge.d.ts +2 -2
- package/dist/pull-bridge.d.ts.map +1 -1
- package/dist/pull-bridge.js +24 -8
- package/dist/pull-bridge.js.map +1 -1
- package/package.json +6 -3
- package/skills/agent-files/AGENTS.md +3 -0
- package/skills/aura3d-animation-studio/SKILL.md +153 -0
- package/skills/aura3d-animation-studio/references/shot-looks.md +26 -0
- package/skills/aura3d-art-direction/SKILL.md +84 -0
- package/skills/aura3d-art-direction/references/failure-gallery.md +64 -0
- package/skills/aura3d-art-direction/references/framing-and-shots.md +45 -0
- package/skills/aura3d-art-direction/references/look-recipes.md +32 -0
- package/skills/aura3d-art-direction/references/quality-bar.md +103 -0
- package/skills/aura3d-art-direction/references/reference-frames.md +82 -0
- package/skills/aura3d-assets/SKILL.md +132 -0
- package/skills/aura3d-assets/references/preview-under-look.md +26 -0
- package/skills/aura3d-browser-game/SKILL.md +127 -0
- package/skills/aura3d-browser-game/references/genre-looks.md +52 -0
- package/skills/aura3d-character-animation/SKILL.md +129 -0
- package/skills/aura3d-character-animation/references/stage-and-lighting.md +31 -0
- package/skills/aura3d-core/SKILL.md +121 -0
- package/skills/aura3d-core/references/boundaries.md +91 -0
- package/skills/aura3d-evidence-review/SKILL.md +106 -0
- package/skills/aura3d-game-art/SKILL.md +118 -0
- package/skills/aura3d-game-art/references/sheet-check.mjs +58 -0
- package/skills/aura3d-game-art/references/sprite-palettes.md +25 -0
- package/skills/aura3d-materials-environments/SKILL.md +139 -0
- package/skills/aura3d-performance/SKILL.md +97 -0
- package/skills/aura3d-retexture/SKILL.md +115 -0
- package/skills/aura3d-retexture/references/geometry-hash.mjs +89 -0
- package/skills/aura3d-scene-authoring/SKILL.md +132 -0
- package/skills/aura3d-scene-authoring/references/look-by-family.md +28 -0
- package/skills/aura3d-threejs-migration/SKILL.md +125 -0
- package/skills/aura3d-threejs-migration/references/look-mapping.md +27 -0
- package/skills/llms.txt +117 -0
- package/skills/manifest.json +163 -0
- package/skills/meshy-cli/SKILL.md +133 -0
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PRD-13 T2.17 — `look judge` + `look rubric` command bodies.
|
|
3
|
+
* Registered as C-39 commands from commands/prd13/index.ts.
|
|
4
|
+
*
|
|
5
|
+
* `look judge --validate <file>` validates a LookJudgement and reports the
|
|
6
|
+
* per-category scores, weakest category and next-change hint.
|
|
7
|
+
* `--judge prism` delegates to C-32 judgeWithPrism when the provider ships it;
|
|
8
|
+
* while the export is absent the command exits 2 with `judge-unavailable`
|
|
9
|
+
* rather than fabricating a score (no new provider code here).
|
|
10
|
+
*/
|
|
11
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
12
|
+
import { resolve } from "node:path";
|
|
13
|
+
import { AGENT_LOOK_CATEGORIES, GENRE_RECIPE_ROWS, LOOK_JUDGEMENT_SCHEMA, lookHintFor, validateLookJudgement, weakestLookCategory } from "./rubric.js";
|
|
14
|
+
function parseArgs(argv) {
|
|
15
|
+
const flags = new Map();
|
|
16
|
+
const switches = new Set();
|
|
17
|
+
for (let i = 0; i < argv.length; i++) {
|
|
18
|
+
const arg = argv[i];
|
|
19
|
+
if (arg.startsWith("--")) {
|
|
20
|
+
const next = argv[i + 1];
|
|
21
|
+
if (next !== undefined && !next.startsWith("--")) {
|
|
22
|
+
flags.set(arg.slice(2), next);
|
|
23
|
+
i += 1;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
switches.add(arg.slice(2));
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return { flags, switches };
|
|
31
|
+
}
|
|
32
|
+
export async function runLookJudge(argv, io) {
|
|
33
|
+
const { flags, switches } = parseArgs(argv);
|
|
34
|
+
const judge = flags.get("judge") ?? "self";
|
|
35
|
+
const asJson = switches.has("json");
|
|
36
|
+
if (judge === "prism") {
|
|
37
|
+
// C-32 provider slot: tools/quality-gate exports judgeWithPrism when PRD 12
|
|
38
|
+
// lands the provider. Absent → exit 2 `judge-unavailable` (spec'd behaviour).
|
|
39
|
+
try {
|
|
40
|
+
const mod = (await import("../../../../tools/quality-gate/src/types.js"));
|
|
41
|
+
if (typeof mod.judgeWithPrism !== "function") {
|
|
42
|
+
io.stderr("judge-unavailable: C-32 judgeWithPrism is not exported by tools/quality-gate yet");
|
|
43
|
+
return 2;
|
|
44
|
+
}
|
|
45
|
+
// Provider path for when PRD 12 lands: delegate and pass through.
|
|
46
|
+
const result = await mod.judgeWithPrism({ argv, cwd: io.cwd });
|
|
47
|
+
io.stdout(asJson ? JSON.stringify(result, null, 2) : String(result));
|
|
48
|
+
return 0;
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
io.stderr("judge-unavailable: C-32 judgeWithPrism is not exported by tools/quality-gate yet");
|
|
52
|
+
return 2;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
const validatePath = flags.get("validate");
|
|
56
|
+
if (!validatePath) {
|
|
57
|
+
io.stderr("look judge requires --validate <look-judgement.json>");
|
|
58
|
+
return 2;
|
|
59
|
+
}
|
|
60
|
+
const file = resolve(io.cwd, validatePath);
|
|
61
|
+
if (!existsSync(file)) {
|
|
62
|
+
io.stderr(`judgement file not found: ${file}`);
|
|
63
|
+
return 2;
|
|
64
|
+
}
|
|
65
|
+
let parsed;
|
|
66
|
+
try {
|
|
67
|
+
parsed = JSON.parse(readFileSync(file, "utf8"));
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
io.stderr(`judgement file is not valid JSON: ${file}`);
|
|
71
|
+
return 2;
|
|
72
|
+
}
|
|
73
|
+
const validation = validateLookJudgement(parsed);
|
|
74
|
+
if (!validation.ok) {
|
|
75
|
+
for (const error of validation.errors)
|
|
76
|
+
io.stderr(`invalid judgement: ${error}`);
|
|
77
|
+
return 1;
|
|
78
|
+
}
|
|
79
|
+
const judgement = parsed;
|
|
80
|
+
const weakest = weakestLookCategory(judgement);
|
|
81
|
+
const hint = weakest ? lookHintFor(weakest) : undefined;
|
|
82
|
+
if (asJson) {
|
|
83
|
+
io.stdout(JSON.stringify({
|
|
84
|
+
ok: true,
|
|
85
|
+
schema: LOOK_JUDGEMENT_SCHEMA,
|
|
86
|
+
judge: judgement.judge,
|
|
87
|
+
round: judgement.round,
|
|
88
|
+
scores: judgement.scores,
|
|
89
|
+
weakestCategory: weakest ?? null,
|
|
90
|
+
hint: hint ?? null
|
|
91
|
+
}, null, 2));
|
|
92
|
+
return 0;
|
|
93
|
+
}
|
|
94
|
+
io.stdout(`judgement ${LOOK_JUDGEMENT_SCHEMA} round ${judgement.round} (${judgement.judge}) is valid`);
|
|
95
|
+
for (const category of AGENT_LOOK_CATEGORIES) {
|
|
96
|
+
const score = judgement.scores[category];
|
|
97
|
+
if (score !== undefined)
|
|
98
|
+
io.stdout(` ${category}: ${score}`);
|
|
99
|
+
}
|
|
100
|
+
if (weakest) {
|
|
101
|
+
io.stdout(`weakest category: ${weakest}`);
|
|
102
|
+
io.stdout(`next change: ${hint.change}`);
|
|
103
|
+
io.stdout(`api: ${hint.api}`);
|
|
104
|
+
}
|
|
105
|
+
return 0;
|
|
106
|
+
}
|
|
107
|
+
export function runLookRubric(argv, io) {
|
|
108
|
+
const { flags, switches } = parseArgs(argv);
|
|
109
|
+
const genre = flags.get("genre");
|
|
110
|
+
const asJson = switches.has("json");
|
|
111
|
+
const rubric = {
|
|
112
|
+
schema: "aura3d.look-rubric/1",
|
|
113
|
+
categories: AGENT_LOOK_CATEGORIES,
|
|
114
|
+
judgementSchema: LOOK_JUDGEMENT_SCHEMA,
|
|
115
|
+
genre: genre ?? null,
|
|
116
|
+
recipe: genre ? GENRE_RECIPE_ROWS[genre] ?? null : null,
|
|
117
|
+
genres: Object.keys(GENRE_RECIPE_ROWS)
|
|
118
|
+
};
|
|
119
|
+
if (genre && !rubric.recipe) {
|
|
120
|
+
io.stderr(`unknown genre "${genre}"; genres: ${rubric.genres.join(", ")}`);
|
|
121
|
+
return 2;
|
|
122
|
+
}
|
|
123
|
+
if (asJson) {
|
|
124
|
+
io.stdout(JSON.stringify(rubric, null, 2));
|
|
125
|
+
return 0;
|
|
126
|
+
}
|
|
127
|
+
io.stdout("Agent look rubric (subset of the C-32 visual categories):");
|
|
128
|
+
for (const category of AGENT_LOOK_CATEGORIES)
|
|
129
|
+
io.stdout(` - ${category}`);
|
|
130
|
+
io.stdout(`judgement schema: ${LOOK_JUDGEMENT_SCHEMA} (scores 0–10 in 0.5 steps; N/A omitted; >= 1 observation per score < 7)`);
|
|
131
|
+
if (genre && rubric.recipe) {
|
|
132
|
+
const row = rubric.recipe;
|
|
133
|
+
io.stdout(`genre ${genre}: look ${row.look} · ${row.camera} · subject ${row.subjectPercent}% · key ${row.keyLight} · palette ${row.palette} · atmosphere ${row.atmosphere} · post ${row.post}`);
|
|
134
|
+
}
|
|
135
|
+
return 0;
|
|
136
|
+
}
|
|
137
|
+
export const lookJudgeCommand = {
|
|
138
|
+
name: "look judge",
|
|
139
|
+
owner: "prd13",
|
|
140
|
+
summary: "Validate a LookJudgement, print scores, weakest category and next-change hint",
|
|
141
|
+
usage: "aura3d look judge --validate <look-judgement.json> [--judge self|prism] [--json]",
|
|
142
|
+
run: (argv, io) => runLookJudge(argv, io)
|
|
143
|
+
};
|
|
144
|
+
export const lookRubricCommand = {
|
|
145
|
+
name: "look rubric",
|
|
146
|
+
owner: "prd13",
|
|
147
|
+
summary: "Print the agent look rubric and (with --genre) the genre recipe row",
|
|
148
|
+
usage: "aura3d look rubric [--genre platformer|racing|...] [--json]",
|
|
149
|
+
run: async (argv, io) => runLookRubric(argv, io)
|
|
150
|
+
};
|
|
151
|
+
//# sourceMappingURL=judge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"judge.js","sourceRoot":"","sources":["../../../../../packages/aura3d-cli/src/look/judge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PRD-13 T2.18 — `look lint` command body + the `look-from-ambient` codemod.
|
|
3
|
+
* Registered as C-39 command `look lint` and codemod `look-from-ambient` from
|
|
4
|
+
* commands/prd13/index.ts.
|
|
5
|
+
*
|
|
6
|
+
* The command is a static TypeScript AST scan over src/** that flags the
|
|
7
|
+
* look-hostile constructs §11.5 lists, then runs every rule other lanes
|
|
8
|
+
* registered through C-39 `registerDoctorRule` (PRD 08 feel/evidence-only,
|
|
9
|
+
* PRD 09 look/capture-branch, ...). PRD 13's own default capture-branch rule
|
|
10
|
+
* covers `look/capture-branch` when PRD 09 has not registered one — it is
|
|
11
|
+
* implemented as a builtin AST rule, so a lane registering the same code later
|
|
12
|
+
* just adds (the C-39 duplicate guard keeps codes unique).
|
|
13
|
+
*/
|
|
14
|
+
import { type AuraCliCommand, type AuraCodemod, type AuraDoctorRule } from "../contracts/commands.js";
|
|
15
|
+
export interface LookLintFinding {
|
|
16
|
+
readonly file: string;
|
|
17
|
+
readonly line: number;
|
|
18
|
+
readonly rule: string;
|
|
19
|
+
readonly severity: "error" | "warning";
|
|
20
|
+
readonly message: string;
|
|
21
|
+
}
|
|
22
|
+
export interface LookLintReport {
|
|
23
|
+
readonly ok: boolean;
|
|
24
|
+
readonly scannedFiles: number;
|
|
25
|
+
readonly findings: readonly LookLintFinding[];
|
|
26
|
+
readonly errors: number;
|
|
27
|
+
readonly warnings: number;
|
|
28
|
+
readonly doctorRules: readonly string[];
|
|
29
|
+
}
|
|
30
|
+
export declare function lookLintFiles(cwd: string): readonly {
|
|
31
|
+
readonly path: string;
|
|
32
|
+
readonly text: string;
|
|
33
|
+
}[];
|
|
34
|
+
export declare function runLookLintScan(cwd: string): LookLintReport;
|
|
35
|
+
export declare function runLookLint(argv: readonly string[], io: {
|
|
36
|
+
readonly cwd: string;
|
|
37
|
+
stdout(s: string): void;
|
|
38
|
+
stderr(s: string): void;
|
|
39
|
+
}): Promise<number>;
|
|
40
|
+
export declare const lookLintCommand: AuraCliCommand;
|
|
41
|
+
export declare const lookFromAmbientCodemod: AuraCodemod;
|
|
42
|
+
/** Default PRD-13 capture-branch doctor rule — registered only when no lane
|
|
43
|
+
* already registered `look/capture-branch` (PRD 09 owns that code when it lands). */
|
|
44
|
+
export declare const defaultCaptureBranchRule: AuraDoctorRule;
|
|
45
|
+
//# sourceMappingURL=lint-static.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lint-static.d.ts","sourceRoot":"","sources":["../../../../../packages/aura3d-cli/src/look/lint-static.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,EAAkB,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAEtH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;IAC9C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAgID,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CAEtG;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAmB3D;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,EAAE,EAAE;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAa1J;AAED,eAAO,MAAM,eAAe,EAAE,cAM7B,CAAC;AAOF,eAAO,MAAM,sBAAsB,EAAE,WAuCpC,CAAC;AAEF;sFACsF;AACtF,eAAO,MAAM,wBAAwB,EAAE,cAatC,CAAC"}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PRD-13 T2.18 — `look lint` command body + the `look-from-ambient` codemod.
|
|
3
|
+
* Registered as C-39 command `look lint` and codemod `look-from-ambient` from
|
|
4
|
+
* commands/prd13/index.ts.
|
|
5
|
+
*
|
|
6
|
+
* The command is a static TypeScript AST scan over src/** that flags the
|
|
7
|
+
* look-hostile constructs §11.5 lists, then runs every rule other lanes
|
|
8
|
+
* registered through C-39 `registerDoctorRule` (PRD 08 feel/evidence-only,
|
|
9
|
+
* PRD 09 look/capture-branch, ...). PRD 13's own default capture-branch rule
|
|
10
|
+
* covers `look/capture-branch` when PRD 09 has not registered one — it is
|
|
11
|
+
* implemented as a builtin AST rule, so a lane registering the same code later
|
|
12
|
+
* just adds (the C-39 duplicate guard keeps codes unique).
|
|
13
|
+
*/
|
|
14
|
+
import { existsSync, readdirSync, readFileSync } from "node:fs";
|
|
15
|
+
import { join, relative, resolve } from "node:path";
|
|
16
|
+
import * as ts from "typescript";
|
|
17
|
+
import { doctorRulesAll } from "../contracts/commands.js";
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
// Source collection
|
|
20
|
+
function listSourceFiles(cwd) {
|
|
21
|
+
const root = resolve(cwd, "src");
|
|
22
|
+
if (!existsSync(root))
|
|
23
|
+
return [];
|
|
24
|
+
const out = [];
|
|
25
|
+
const visit = (dir) => {
|
|
26
|
+
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
27
|
+
const path = join(dir, entry.name);
|
|
28
|
+
if (entry.isDirectory())
|
|
29
|
+
visit(path);
|
|
30
|
+
else if (/\.(ts|tsx|mts)$/.test(entry.name))
|
|
31
|
+
out.push(path);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
visit(root);
|
|
35
|
+
return out.sort();
|
|
36
|
+
}
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
// AST helpers
|
|
39
|
+
function lineOf(sourceFile, node) {
|
|
40
|
+
return sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile)).line + 1;
|
|
41
|
+
}
|
|
42
|
+
function callExpressionName(node) {
|
|
43
|
+
if (!ts.isCallExpression(node))
|
|
44
|
+
return undefined;
|
|
45
|
+
const expr = node.expression;
|
|
46
|
+
if (ts.isPropertyAccessExpression(expr)) {
|
|
47
|
+
const left = callExpressionRootName(expr.expression);
|
|
48
|
+
return left ? `${left}.${expr.name.text}` : expr.name.text;
|
|
49
|
+
}
|
|
50
|
+
if (ts.isIdentifier(expr))
|
|
51
|
+
return expr.text;
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
function callExpressionRootName(expr) {
|
|
55
|
+
if (ts.isIdentifier(expr))
|
|
56
|
+
return expr.text;
|
|
57
|
+
if (ts.isPropertyAccessExpression(expr)) {
|
|
58
|
+
const base = callExpressionRootName(expr.expression);
|
|
59
|
+
return base ? `${base}.${expr.name.text}` : undefined;
|
|
60
|
+
}
|
|
61
|
+
if (ts.isCallExpression(expr))
|
|
62
|
+
return callExpressionRootName(expr.expression);
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
/** Evidence-style property names whose `true` literal is a frozen claim. */
|
|
66
|
+
const EVIDENCE_TRUE_KEY = /(?:Aligned|InFrame|Framed|Applied|Reached|Visible|Grounded|Anchored|OnTrack|OnFloor|Clamped|Ready|Loaded|Enabled|Attached|Collected|Completed)(?:[A-Z][\w]*)*$/;
|
|
67
|
+
/** Overlay/debug-ish defaults that must not ship in a captured frame. */
|
|
68
|
+
const OVERLAY_TRUE_KEY = /^(?:debug|overlay|showOverlay|showHud|hud|stats|showStats|helpers|showHelpers|showGrid|grid|showAxes|axes|wireframe|showBounds)$/;
|
|
69
|
+
function collectFileFacts(sourceFile) {
|
|
70
|
+
let usesEnvironment = false;
|
|
71
|
+
let usesLooks = false;
|
|
72
|
+
const visit = (node) => {
|
|
73
|
+
const name = callExpressionName(node);
|
|
74
|
+
if (name?.startsWith("environments."))
|
|
75
|
+
usesEnvironment = true;
|
|
76
|
+
if (name === "looks.preset" || name === "looks.nodes" || name === "scene.look")
|
|
77
|
+
usesLooks = true;
|
|
78
|
+
ts.forEachChild(node, visit);
|
|
79
|
+
};
|
|
80
|
+
visit(sourceFile);
|
|
81
|
+
return { usesEnvironment, usesLooks };
|
|
82
|
+
}
|
|
83
|
+
function scanFile(path, relativeFile, source) {
|
|
84
|
+
const sourceFile = ts.createSourceFile(relativeFile, source, ts.ScriptTarget.Latest, true);
|
|
85
|
+
const facts = collectFileFacts(sourceFile);
|
|
86
|
+
const findings = [];
|
|
87
|
+
const hasEnv = facts.usesEnvironment || facts.usesLooks; // a look supplies its own env
|
|
88
|
+
const push = (node, rule, severity, message) => {
|
|
89
|
+
findings.push({ file: relativeFile, line: lineOf(sourceFile, node), rule, severity, message });
|
|
90
|
+
};
|
|
91
|
+
const visit = (node) => {
|
|
92
|
+
// lights.ambient(...) with no env/look in the same scene flattens shading.
|
|
93
|
+
if (callExpressionName(node) === "lights.ambient" && !hasEnv) {
|
|
94
|
+
push(node, "look/ambient-without-env", "error", "lights.ambient() with no environment or look in this file — pick a look (looks.preset) instead of bare ambient fill");
|
|
95
|
+
}
|
|
96
|
+
// lean imports bypass the look pipeline entirely.
|
|
97
|
+
if (ts.isImportDeclaration(node) && ts.isStringLiteral(node.moduleSpecifier) && node.moduleSpecifier.text.startsWith("@aura3d/lean")) {
|
|
98
|
+
push(node, "look/lean-import", "error", `import from ${node.moduleSpecifier.text} bypasses looks — use @aura3d/engine with looks.preset`);
|
|
99
|
+
}
|
|
100
|
+
// renderer overrides fight the look's own render config.
|
|
101
|
+
if (ts.isPropertyAccessExpression(node) && ts.isIdentifier(node.expression) && node.expression.text === "renderer") {
|
|
102
|
+
const prop = node.name.text;
|
|
103
|
+
if (prop === "toneMapping" || prop === "toneMappingExposure" || prop === "outputColorSpace" || prop === "setPixelRatio") {
|
|
104
|
+
push(node, "look/renderer-override", "error", `renderer.${prop} overrides the look's render config — set it through the look instead`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// capture branches: behaviour keyed on capture/screenshot URL params.
|
|
108
|
+
if (ts.isCallExpression(node) && ts.isPropertyAccessExpression(node.expression)) {
|
|
109
|
+
const callee = callExpressionName(node) ?? "";
|
|
110
|
+
if (/\.get$/.test(callee) && node.arguments.length > 0 && ts.isStringLiteral(node.arguments[0])) {
|
|
111
|
+
const param = node.arguments[0].text;
|
|
112
|
+
if (param === "capture" || param === "screenshot" || param === "snapshot" || param === "lookdev") {
|
|
113
|
+
push(node, "look/capture-branch", "error", `code branches on the "${param}" URL param — one code path; captures observe it`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
if (ts.isStringLiteral(node) && /\bcapture\b|\bscreenshot\b|\bsnapshot\b|\blookdev\b/.test(node.text) && node.text.includes("=")) {
|
|
118
|
+
push(node, "look/capture-branch", "warning", `URL fragment "${node.text}" may carry a capture flag`);
|
|
119
|
+
}
|
|
120
|
+
// `x: true` evidence/overlay literals.
|
|
121
|
+
if (ts.isPropertyAssignment(node) && node.initializer.kind === ts.SyntaxKind.TrueKeyword && ts.isIdentifier(node.name)) {
|
|
122
|
+
const key = node.name.text;
|
|
123
|
+
if (OVERLAY_TRUE_KEY.test(key)) {
|
|
124
|
+
push(node, "look/overlay-default", "error", `${key}: true ships an overlay/debug element — remove it or default false`);
|
|
125
|
+
}
|
|
126
|
+
else if (EVIDENCE_TRUE_KEY.test(key)) {
|
|
127
|
+
push(node, "look/evidence-constant", "warning", `${key}: true is a constant evidence claim — compute it from the real state`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
ts.forEachChild(node, visit);
|
|
131
|
+
};
|
|
132
|
+
visit(sourceFile);
|
|
133
|
+
return findings;
|
|
134
|
+
}
|
|
135
|
+
// ---------------------------------------------------------------------------
|
|
136
|
+
// Command
|
|
137
|
+
export function lookLintFiles(cwd) {
|
|
138
|
+
return listSourceFiles(cwd).map((path) => ({ path, text: readFileSync(path, "utf8") }));
|
|
139
|
+
}
|
|
140
|
+
export function runLookLintScan(cwd) {
|
|
141
|
+
const files = lookLintFiles(cwd);
|
|
142
|
+
const findings = [];
|
|
143
|
+
for (const file of files) {
|
|
144
|
+
findings.push(...scanFile(file.path, relative(cwd, file.path), file.text));
|
|
145
|
+
}
|
|
146
|
+
// C-39 doctor rules from every lane run over the same files.
|
|
147
|
+
const doctorCodes = [];
|
|
148
|
+
for (const rule of doctorRulesAll()) {
|
|
149
|
+
doctorCodes.push(rule.code);
|
|
150
|
+
for (const file of files) {
|
|
151
|
+
for (const hit of rule.check({ path: relative(cwd, file.path), text: file.text })) {
|
|
152
|
+
findings.push({ file: relative(cwd, file.path), line: hit.line, rule: rule.code, severity: hit.severity, message: hit.message });
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
const errors = findings.filter((f) => f.severity === "error").length;
|
|
157
|
+
const warnings = findings.length - errors;
|
|
158
|
+
return { ok: errors === 0, scannedFiles: files.length, findings, errors, warnings, doctorRules: doctorCodes };
|
|
159
|
+
}
|
|
160
|
+
export async function runLookLint(argv, io) {
|
|
161
|
+
const switches = new Set(argv.filter((a) => a.startsWith("--")));
|
|
162
|
+
const report = runLookLintScan(io.cwd);
|
|
163
|
+
if (switches.has("--json")) {
|
|
164
|
+
io.stdout(JSON.stringify(report, null, 2));
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
io.stdout(`look lint scanned ${report.scannedFiles} files under src/ (doctor rules: ${report.doctorRules.join(", ") || "none registered"})`);
|
|
168
|
+
for (const finding of report.findings) {
|
|
169
|
+
io.stdout(` ${finding.severity} ${finding.file}:${finding.line} [${finding.rule}] ${finding.message}`);
|
|
170
|
+
}
|
|
171
|
+
io.stdout(`${report.errors} errors, ${report.warnings} warnings`);
|
|
172
|
+
}
|
|
173
|
+
return report.ok ? 0 : 1;
|
|
174
|
+
}
|
|
175
|
+
export const lookLintCommand = {
|
|
176
|
+
name: "look lint",
|
|
177
|
+
owner: "prd13",
|
|
178
|
+
summary: "Static look-lint over src/** (AST) plus every C-39 registerDoctorRule rule",
|
|
179
|
+
usage: "aura3d look lint [--json]",
|
|
180
|
+
run: (argv, io) => runLookLint(argv, io)
|
|
181
|
+
};
|
|
182
|
+
// ---------------------------------------------------------------------------
|
|
183
|
+
// look-from-ambient codemod (§11.5)
|
|
184
|
+
const DEFAULT_LOOK_ID = "outdoor-day";
|
|
185
|
+
export const lookFromAmbientCodemod = {
|
|
186
|
+
name: "look-from-ambient",
|
|
187
|
+
owner: "prd13",
|
|
188
|
+
description: "Replace bare lights.ambient() (no env/look in file) with looks.preset + TODO; drop renderer qualityProfile 'safe-basic'; move report.visualSystems consumers to report.appliedEffects",
|
|
189
|
+
transform(source, fileName) {
|
|
190
|
+
const sourceFile = ts.createSourceFile(fileName, source, ts.ScriptTarget.Latest, true);
|
|
191
|
+
const facts = collectFileFacts(sourceFile);
|
|
192
|
+
const rows = [];
|
|
193
|
+
const edits = [];
|
|
194
|
+
const visit = (node) => {
|
|
195
|
+
// lights.ambient(...) with no env node in the same scene → look preset + TODO.
|
|
196
|
+
if (ts.isCallExpression(node) && callExpressionName(node) === "lights.ambient" && !facts.usesEnvironment && !facts.usesLooks) {
|
|
197
|
+
edits.push({ start: node.getStart(sourceFile), end: node.getEnd(), text: `looks.preset("${DEFAULT_LOOK_ID}") /* TODO: pick the scene's genre look — see aura3d look rubric */` });
|
|
198
|
+
rows.push({ file: fileName, line: lineOf(sourceFile, node), construct: "lights.ambient", mapping: "approximate", target: `looks.preset("${DEFAULT_LOOK_ID}")`, note: "ambient light replaced by a look; confirm the genre look id" });
|
|
199
|
+
}
|
|
200
|
+
// renderer.qualityProfile: "safe-basic" → property removed.
|
|
201
|
+
if (ts.isPropertyAssignment(node) && ts.isIdentifier(node.name) && node.name.text === "qualityProfile" && ts.isStringLiteral(node.initializer) && node.initializer.text === "safe-basic") {
|
|
202
|
+
// Remove the property including a trailing comma when present.
|
|
203
|
+
let end = node.getEnd();
|
|
204
|
+
while (end < source.length && /\s/.test(source[end]))
|
|
205
|
+
end += 1;
|
|
206
|
+
if (source[end] === ",")
|
|
207
|
+
end += 1;
|
|
208
|
+
edits.push({ start: node.getStart(sourceFile), end, text: "" });
|
|
209
|
+
rows.push({ file: fileName, line: lineOf(sourceFile, node), construct: 'renderer.qualityProfile: "safe-basic"', mapping: "exact", note: "safe-basic removed; the look sets the render profile" });
|
|
210
|
+
}
|
|
211
|
+
// report.visualSystems → report.appliedEffects (V2 consumers).
|
|
212
|
+
if (ts.isPropertyAccessExpression(node) && node.name.text === "visualSystems") {
|
|
213
|
+
edits.push({ start: node.name.getStart(sourceFile), end: node.name.getEnd(), text: "appliedEffects" });
|
|
214
|
+
rows.push({ file: fileName, line: lineOf(sourceFile, node), construct: ".visualSystems", mapping: "approximate", target: ".appliedEffects", note: "apply when the consumer moves to compilePromptPlanV2" });
|
|
215
|
+
}
|
|
216
|
+
ts.forEachChild(node, visit);
|
|
217
|
+
};
|
|
218
|
+
visit(sourceFile);
|
|
219
|
+
const code = edits
|
|
220
|
+
.sort((a, b) => b.start - a.start)
|
|
221
|
+
.reduce((text, edit) => `${text.slice(0, edit.start)}${edit.text}${text.slice(edit.end)}`, source);
|
|
222
|
+
return { code, rows };
|
|
223
|
+
}
|
|
224
|
+
};
|
|
225
|
+
/** Default PRD-13 capture-branch doctor rule — registered only when no lane
|
|
226
|
+
* already registered `look/capture-branch` (PRD 09 owns that code when it lands). */
|
|
227
|
+
export const defaultCaptureBranchRule = {
|
|
228
|
+
code: "look/capture-branch",
|
|
229
|
+
owner: "prd13",
|
|
230
|
+
check(file) {
|
|
231
|
+
const hits = [];
|
|
232
|
+
const lines = file.text.split("\n");
|
|
233
|
+
for (const [index, line] of lines.entries()) {
|
|
234
|
+
if (/searchParams\.get\(["'](?:capture|screenshot|snapshot|lookdev)["']\)/.test(line) || /[?&](?:capture|screenshot|snapshot|lookdev)=/.test(line)) {
|
|
235
|
+
hits.push({ line: index + 1, message: "behaviour branches on a capture/screenshot URL param — one code path; captures observe it", severity: "error" });
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
return hits;
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
//# sourceMappingURL=lint-static.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lint-static.js","sourceRoot":"","sources":["../../../../../packages/aura3d-cli/src/look/lint-static.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PRD-13 §7.6 — `look rubric` / `look judge` data model.
|
|
3
|
+
*
|
|
4
|
+
* AGENT_LOOK_CATEGORIES is the 12-category agent judging rubric: the subset of
|
|
5
|
+
* C-32 GAME_VISUAL_CATEGORIES an agent can move from code (the full list also
|
|
6
|
+
* covers sound, controls, physics feel, ... that screenshots cannot prove).
|
|
7
|
+
* The ⊆ assertion lives in tests/unit/cli/look-judge.test.ts.
|
|
8
|
+
*
|
|
9
|
+
* CATEGORY_HINTS is the next-change hint table the judge reports: keyed by the
|
|
10
|
+
* weakest rubric category, it names the concrete @aura3d/engine API to touch —
|
|
11
|
+
* drawn from aura3d-art-direction/references/look-recipes.md and the lookLint
|
|
12
|
+
* rule inventory. Keep entries in terms of real exported APIs only.
|
|
13
|
+
*/
|
|
14
|
+
export declare const AGENT_LOOK_CATEGORIES: readonly ["lighting", "shadows", "ibl_reflections", "environment_world", "atmospheric_effects", "material_quality", "modeling_assets", "composition", "camera", "postprocessing", "animation_quality", "ui_hud"];
|
|
15
|
+
export type AgentLookCategory = (typeof AGENT_LOOK_CATEGORIES)[number];
|
|
16
|
+
export declare const LOOK_JUDGEMENT_SCHEMA: "aura3d.look-judgement/1";
|
|
17
|
+
export interface LookJudgement {
|
|
18
|
+
readonly schema: typeof LOOK_JUDGEMENT_SCHEMA;
|
|
19
|
+
readonly round: number;
|
|
20
|
+
readonly shots: readonly {
|
|
21
|
+
readonly path: string;
|
|
22
|
+
readonly sha256: string;
|
|
23
|
+
}[];
|
|
24
|
+
readonly references: readonly string[];
|
|
25
|
+
readonly scores: Readonly<Partial<Record<AgentLookCategory, number>>>;
|
|
26
|
+
readonly observations: readonly {
|
|
27
|
+
readonly category: string;
|
|
28
|
+
readonly seen: string;
|
|
29
|
+
}[];
|
|
30
|
+
readonly nextChange: {
|
|
31
|
+
readonly category: string;
|
|
32
|
+
readonly change: string;
|
|
33
|
+
readonly api: string;
|
|
34
|
+
};
|
|
35
|
+
readonly judge: "self" | "prism";
|
|
36
|
+
}
|
|
37
|
+
/** Genre → recipe row (condensed from look-recipes.md; the doc is the narrative). */
|
|
38
|
+
export declare const GENRE_RECIPE_ROWS: Readonly<Record<string, {
|
|
39
|
+
readonly look: string;
|
|
40
|
+
readonly camera: string;
|
|
41
|
+
readonly subjectPercent: string;
|
|
42
|
+
readonly keyLight: string;
|
|
43
|
+
readonly palette: string;
|
|
44
|
+
readonly atmosphere: string;
|
|
45
|
+
readonly post: string;
|
|
46
|
+
}>>;
|
|
47
|
+
export interface LookHint {
|
|
48
|
+
readonly category: string;
|
|
49
|
+
readonly change: string;
|
|
50
|
+
readonly api: string;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Weakest-category → concrete next change. APIs are restricted to the public
|
|
54
|
+
* @aura3d/engine surface (looks.preset overrides, environments.*, lights.*,
|
|
55
|
+
* camera.*, effects/post ids) so the hint is always actionable.
|
|
56
|
+
*/
|
|
57
|
+
export declare const CATEGORY_HINTS: Readonly<Record<string, LookHint>>;
|
|
58
|
+
/** Lint-code → hint prefix so judge output ties a weak category to the failing rule. */
|
|
59
|
+
export declare const LINT_CODE_HINTS: Readonly<Record<string, {
|
|
60
|
+
readonly change: string;
|
|
61
|
+
readonly api: string;
|
|
62
|
+
}>>;
|
|
63
|
+
export declare function lookHintFor(category: string, lintCodes?: readonly string[]): LookHint;
|
|
64
|
+
export interface LookJudgementValidation {
|
|
65
|
+
readonly ok: boolean;
|
|
66
|
+
readonly errors: readonly string[];
|
|
67
|
+
}
|
|
68
|
+
export declare function validateLookJudgement(value: unknown): LookJudgementValidation;
|
|
69
|
+
export declare function weakestLookCategory(judgement: LookJudgement): AgentLookCategory | undefined;
|
|
70
|
+
//# sourceMappingURL=rubric.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rubric.d.ts","sourceRoot":"","sources":["../../../../../packages/aura3d-cli/src/look/rubric.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,eAAO,MAAM,qBAAqB,kNAIxB,CAAC;AACX,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvE,eAAO,MAAM,qBAAqB,EAAG,yBAAkC,CAAC;AAExE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,OAAO,qBAAqB,CAAC;IAC9C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC9E,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IACtE,QAAQ,CAAC,YAAY,EAAE,SAAS;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACvF,QAAQ,CAAC,UAAU,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAClG,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAClC;AAED,qFAAqF;AACrF,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;IACtD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzG,CAAC,CAcD,CAAC;AAEF,MAAM,WAAW,QAAQ;IAAG,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE;AAEtG;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAa7D,CAAC;AAEF,wFAAwF;AACxF,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAgBvG,CAAC;AAEF,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,GAAE,SAAS,MAAM,EAAO,GAAG,QAAQ,CASzF;AAKD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAID,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,uBAAuB,CAyD7E;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,aAAa,GAAG,iBAAiB,GAAG,SAAS,CAU3F"}
|