@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.
Files changed (376) hide show
  1. package/README.md +2 -2
  2. package/dist/admission/artDirection.d.ts +28 -0
  3. package/dist/admission/artDirection.d.ts.map +1 -0
  4. package/dist/admission/artDirection.js +47 -0
  5. package/dist/admission/artDirection.js.map +1 -0
  6. package/dist/admission/audio.d.ts +19 -0
  7. package/dist/admission/audio.d.ts.map +1 -0
  8. package/dist/admission/audio.js +31 -0
  9. package/dist/admission/audio.js.map +1 -0
  10. package/dist/admission/builder-patterns.d.ts +25 -0
  11. package/dist/admission/builder-patterns.d.ts.map +1 -0
  12. package/dist/admission/builder-patterns.js +40 -0
  13. package/dist/admission/builder-patterns.js.map +1 -0
  14. package/dist/admission/gates.d.ts +136 -0
  15. package/dist/admission/gates.d.ts.map +1 -0
  16. package/dist/admission/gates.js +335 -0
  17. package/dist/admission/gates.js.map +1 -0
  18. package/dist/admission/glb.d.ts +64 -0
  19. package/dist/admission/glb.d.ts.map +1 -0
  20. package/dist/admission/glb.js +128 -0
  21. package/dist/admission/glb.js.map +1 -0
  22. package/dist/admission/index.d.ts +8 -0
  23. package/dist/admission/index.d.ts.map +1 -0
  24. package/dist/admission/index.js +8 -0
  25. package/dist/admission/index.js.map +1 -0
  26. package/dist/admission/profiles.d.ts +52 -0
  27. package/dist/admission/profiles.d.ts.map +1 -0
  28. package/dist/admission/profiles.js +91 -0
  29. package/dist/admission/profiles.js.map +1 -0
  30. package/dist/admission/qrFlags.d.ts +12 -0
  31. package/dist/admission/qrFlags.d.ts.map +1 -0
  32. package/dist/admission/qrFlags.js +48 -0
  33. package/dist/admission/qrFlags.js.map +1 -0
  34. package/dist/admission/routeGates.d.ts +36 -0
  35. package/dist/admission/routeGates.d.ts.map +1 -0
  36. package/dist/admission/routeGates.js +144 -0
  37. package/dist/admission/routeGates.js.map +1 -0
  38. package/dist/admission/texel.d.ts +50 -0
  39. package/dist/admission/texel.d.ts.map +1 -0
  40. package/dist/admission/texel.js +177 -0
  41. package/dist/admission/texel.js.map +1 -0
  42. package/dist/admission/textureStats.d.ts +45 -0
  43. package/dist/admission/textureStats.d.ts.map +1 -0
  44. package/dist/admission/textureStats.js +201 -0
  45. package/dist/admission/textureStats.js.map +1 -0
  46. package/dist/animation-asset-validator.d.ts +44 -0
  47. package/dist/animation-asset-validator.d.ts.map +1 -1
  48. package/dist/animation-asset-validator.js +80 -1
  49. package/dist/animation-asset-validator.js.map +1 -1
  50. package/dist/asset-core-types.d.ts +99 -4
  51. package/dist/asset-core-types.d.ts.map +1 -1
  52. package/dist/asset-inspection-types.d.ts +8 -0
  53. package/dist/asset-inspection-types.d.ts.map +1 -1
  54. package/dist/asset-manifest.d.ts +1 -0
  55. package/dist/asset-manifest.d.ts.map +1 -1
  56. package/dist/asset-manifest.js +13 -4
  57. package/dist/asset-manifest.js.map +1 -1
  58. package/dist/asset-route-typegen.d.ts +37 -0
  59. package/dist/asset-route-typegen.d.ts.map +1 -0
  60. package/dist/asset-route-typegen.js +179 -0
  61. package/dist/asset-route-typegen.js.map +1 -0
  62. package/dist/cli-help.d.ts +1 -1
  63. package/dist/cli-help.d.ts.map +1 -1
  64. package/dist/cli-help.js +9 -4
  65. package/dist/cli-help.js.map +1 -1
  66. package/dist/cli-options.d.ts +7 -0
  67. package/dist/cli-options.d.ts.map +1 -1
  68. package/dist/cli-options.js +33 -2
  69. package/dist/cli-options.js.map +1 -1
  70. package/dist/cli.d.ts +1 -1
  71. package/dist/cli.d.ts.map +1 -1
  72. package/dist/cli.js +126 -11
  73. package/dist/cli.js.map +1 -1
  74. package/dist/codemods/engine-entry-imports.d.ts +22 -0
  75. package/dist/codemods/engine-entry-imports.d.ts.map +1 -0
  76. package/dist/codemods/engine-entry-imports.js +159 -0
  77. package/dist/codemods/engine-entry-imports.js.map +1 -0
  78. package/dist/codemods/lean-imports.d.ts +40 -0
  79. package/dist/codemods/lean-imports.d.ts.map +1 -0
  80. package/dist/codemods/lean-imports.js +175 -0
  81. package/dist/codemods/lean-imports.js.map +1 -0
  82. package/dist/codemods/renderer-imports.d.ts +36 -0
  83. package/dist/codemods/renderer-imports.d.ts.map +1 -0
  84. package/dist/codemods/renderer-imports.js +364 -0
  85. package/dist/codemods/renderer-imports.js.map +1 -0
  86. package/dist/codemods/renderer-mode.d.ts +38 -0
  87. package/dist/codemods/renderer-mode.d.ts.map +1 -0
  88. package/dist/codemods/renderer-mode.js +130 -0
  89. package/dist/codemods/renderer-mode.js.map +1 -0
  90. package/dist/commands/prd01/index.d.ts +8 -0
  91. package/dist/commands/prd01/index.d.ts.map +1 -0
  92. package/dist/commands/prd01/index.js +39 -0
  93. package/dist/commands/prd01/index.js.map +1 -0
  94. package/dist/commands/prd02/environmentsBake.d.ts +6 -0
  95. package/dist/commands/prd02/environmentsBake.d.ts.map +1 -0
  96. package/dist/commands/prd02/environmentsBake.js +174 -0
  97. package/dist/commands/prd02/environmentsBake.js.map +1 -0
  98. package/dist/commands/prd02/index.d.ts +2 -0
  99. package/dist/commands/prd02/index.d.ts.map +1 -0
  100. package/dist/commands/prd02/index.js +26 -0
  101. package/dist/commands/prd02/index.js.map +1 -0
  102. package/dist/commands/prd02/migrateLighting.d.ts +17 -0
  103. package/dist/commands/prd02/migrateLighting.d.ts.map +1 -0
  104. package/dist/commands/prd02/migrateLighting.js +86 -0
  105. package/dist/commands/prd02/migrateLighting.js.map +1 -0
  106. package/dist/commands/prd02/migrateLightingSweep.d.ts +20 -0
  107. package/dist/commands/prd02/migrateLightingSweep.d.ts.map +1 -0
  108. package/dist/commands/prd02/migrateLightingSweep.js +105 -0
  109. package/dist/commands/prd02/migrateLightingSweep.js.map +1 -0
  110. package/dist/commands/prd03/index.d.ts +7 -0
  111. package/dist/commands/prd03/index.d.ts.map +1 -0
  112. package/dist/commands/prd03/index.js +9 -0
  113. package/dist/commands/prd03/index.js.map +1 -0
  114. package/dist/commands/prd04/index.d.ts +10 -0
  115. package/dist/commands/prd04/index.d.ts.map +1 -0
  116. package/dist/commands/prd04/index.js +10 -0
  117. package/dist/commands/prd04/index.js.map +1 -0
  118. package/dist/commands/prd04/modelTintReport.d.ts +16 -0
  119. package/dist/commands/prd04/modelTintReport.d.ts.map +1 -0
  120. package/dist/commands/prd04/modelTintReport.js +114 -0
  121. package/dist/commands/prd04/modelTintReport.js.map +1 -0
  122. package/dist/commands/prd04/pinEmissiveDefaults.d.ts +3 -0
  123. package/dist/commands/prd04/pinEmissiveDefaults.d.ts.map +1 -0
  124. package/dist/commands/prd04/pinEmissiveDefaults.js +36 -0
  125. package/dist/commands/prd04/pinEmissiveDefaults.js.map +1 -0
  126. package/dist/commands/prd05/admit.d.ts +54 -0
  127. package/dist/commands/prd05/admit.d.ts.map +1 -0
  128. package/dist/commands/prd05/admit.js +153 -0
  129. package/dist/commands/prd05/admit.js.map +1 -0
  130. package/dist/commands/prd05/codemods/assetsRouteModules.d.ts +3 -0
  131. package/dist/commands/prd05/codemods/assetsRouteModules.d.ts.map +1 -0
  132. package/dist/commands/prd05/codemods/assetsRouteModules.js +92 -0
  133. package/dist/commands/prd05/codemods/assetsRouteModules.js.map +1 -0
  134. package/dist/commands/prd05/index.d.ts +9 -0
  135. package/dist/commands/prd05/index.d.ts.map +1 -0
  136. package/dist/commands/prd05/index.js +171 -0
  137. package/dist/commands/prd05/index.js.map +1 -0
  138. package/dist/commands/prd05/library.d.ts +23 -0
  139. package/dist/commands/prd05/library.d.ts.map +1 -0
  140. package/dist/commands/prd05/library.js +245 -0
  141. package/dist/commands/prd05/library.js.map +1 -0
  142. package/dist/commands/prd05/lookdev.d.ts +14 -0
  143. package/dist/commands/prd05/lookdev.d.ts.map +1 -0
  144. package/dist/commands/prd05/lookdev.js +68 -0
  145. package/dist/commands/prd05/lookdev.js.map +1 -0
  146. package/dist/commands/prd05/optimize.d.ts +16 -0
  147. package/dist/commands/prd05/optimize.d.ts.map +1 -0
  148. package/dist/commands/prd05/optimize.js +55 -0
  149. package/dist/commands/prd05/optimize.js.map +1 -0
  150. package/dist/commands/prd05/prune.d.ts +26 -0
  151. package/dist/commands/prd05/prune.d.ts.map +1 -0
  152. package/dist/commands/prd05/prune.js +104 -0
  153. package/dist/commands/prd05/prune.js.map +1 -0
  154. package/dist/commands/prd05/review.d.ts +24 -0
  155. package/dist/commands/prd05/review.d.ts.map +1 -0
  156. package/dist/commands/prd05/review.js +40 -0
  157. package/dist/commands/prd05/review.js.map +1 -0
  158. package/dist/commands/prd06/index.d.ts +6 -0
  159. package/dist/commands/prd06/index.d.ts.map +1 -0
  160. package/dist/commands/prd06/index.js +86 -0
  161. package/dist/commands/prd06/index.js.map +1 -0
  162. package/dist/commands/prd06/inspectAnimationClips.d.ts +86 -0
  163. package/dist/commands/prd06/inspectAnimationClips.d.ts.map +1 -0
  164. package/dist/commands/prd06/inspectAnimationClips.js +168 -0
  165. package/dist/commands/prd06/inspectAnimationClips.js.map +1 -0
  166. package/dist/commands/prd06/validateHero.d.ts +18 -0
  167. package/dist/commands/prd06/validateHero.d.ts.map +1 -0
  168. package/dist/commands/prd06/validateHero.js +91 -0
  169. package/dist/commands/prd06/validateHero.js.map +1 -0
  170. package/dist/commands/prd07/codemods.d.ts +28 -0
  171. package/dist/commands/prd07/codemods.d.ts.map +1 -0
  172. package/dist/commands/prd07/codemods.js +155 -0
  173. package/dist/commands/prd07/codemods.js.map +1 -0
  174. package/dist/commands/prd07/index.d.ts +2 -0
  175. package/dist/commands/prd07/index.d.ts.map +1 -0
  176. package/dist/commands/prd07/index.js +151 -0
  177. package/dist/commands/prd07/index.js.map +1 -0
  178. package/dist/commands/prd08/feelLint.d.ts +13 -0
  179. package/dist/commands/prd08/feelLint.d.ts.map +1 -0
  180. package/dist/commands/prd08/feelLint.js +32 -0
  181. package/dist/commands/prd08/feelLint.js.map +1 -0
  182. package/dist/commands/prd08/index.d.ts +2 -0
  183. package/dist/commands/prd08/index.d.ts.map +1 -0
  184. package/dist/commands/prd08/index.js +16 -0
  185. package/dist/commands/prd08/index.js.map +1 -0
  186. package/dist/commands/prd08/motionReport.d.ts +94 -0
  187. package/dist/commands/prd08/motionReport.d.ts.map +1 -0
  188. package/dist/commands/prd08/motionReport.js +197 -0
  189. package/dist/commands/prd08/motionReport.js.map +1 -0
  190. package/dist/commands/prd09/codemods/audio-wrapper.d.ts +9 -0
  191. package/dist/commands/prd09/codemods/audio-wrapper.d.ts.map +1 -0
  192. package/dist/commands/prd09/codemods/audio-wrapper.js +30 -0
  193. package/dist/commands/prd09/codemods/audio-wrapper.js.map +1 -0
  194. package/dist/commands/prd09/codemods/capture-branches.d.ts +10 -0
  195. package/dist/commands/prd09/codemods/capture-branches.d.ts.map +1 -0
  196. package/dist/commands/prd09/codemods/capture-branches.js +54 -0
  197. package/dist/commands/prd09/codemods/capture-branches.js.map +1 -0
  198. package/dist/commands/prd09/codemods/evidence-globals.d.ts +8 -0
  199. package/dist/commands/prd09/codemods/evidence-globals.d.ts.map +1 -0
  200. package/dist/commands/prd09/codemods/evidence-globals.js +19 -0
  201. package/dist/commands/prd09/codemods/evidence-globals.js.map +1 -0
  202. package/dist/commands/prd09/codemods/perf-script.d.ts +8 -0
  203. package/dist/commands/prd09/codemods/perf-script.d.ts.map +1 -0
  204. package/dist/commands/prd09/codemods/perf-script.js +24 -0
  205. package/dist/commands/prd09/codemods/perf-script.js.map +1 -0
  206. package/dist/commands/prd09/index.d.ts +8 -0
  207. package/dist/commands/prd09/index.d.ts.map +1 -0
  208. package/dist/commands/prd09/index.js +19 -0
  209. package/dist/commands/prd09/index.js.map +1 -0
  210. package/dist/commands/prd09/perf-report.d.ts +56 -0
  211. package/dist/commands/prd09/perf-report.d.ts.map +1 -0
  212. package/dist/commands/prd09/perf-report.js +118 -0
  213. package/dist/commands/prd09/perf-report.js.map +1 -0
  214. package/dist/commands/prd09/sfx-admit.d.ts +18 -0
  215. package/dist/commands/prd09/sfx-admit.d.ts.map +1 -0
  216. package/dist/commands/prd09/sfx-admit.js +120 -0
  217. package/dist/commands/prd09/sfx-admit.js.map +1 -0
  218. package/dist/commands/prd10/index.d.ts +2 -0
  219. package/dist/commands/prd10/index.d.ts.map +1 -0
  220. package/dist/commands/prd10/index.js +109 -0
  221. package/dist/commands/prd10/index.js.map +1 -0
  222. package/dist/commands/prd11/batchOptout.d.ts +35 -0
  223. package/dist/commands/prd11/batchOptout.d.ts.map +1 -0
  224. package/dist/commands/prd11/batchOptout.js +155 -0
  225. package/dist/commands/prd11/batchOptout.js.map +1 -0
  226. package/dist/commands/prd11/index.d.ts +2 -0
  227. package/dist/commands/prd11/index.d.ts.map +1 -0
  228. package/dist/commands/prd11/index.js +13 -0
  229. package/dist/commands/prd11/index.js.map +1 -0
  230. package/dist/commands/prd11/perfGate.d.ts +15 -0
  231. package/dist/commands/prd11/perfGate.d.ts.map +1 -0
  232. package/dist/commands/prd11/perfGate.js +98 -0
  233. package/dist/commands/prd11/perfGate.js.map +1 -0
  234. package/dist/commands/prd13/index.d.ts +15 -0
  235. package/dist/commands/prd13/index.d.ts.map +1 -0
  236. package/dist/commands/prd13/index.js +26 -0
  237. package/dist/commands/prd13/index.js.map +1 -0
  238. package/dist/commands/prd13/run.d.ts +10 -0
  239. package/dist/commands/prd13/run.d.ts.map +1 -0
  240. package/dist/commands/prd13/run.js +29 -0
  241. package/dist/commands/prd13/run.js.map +1 -0
  242. package/dist/commands/prd14/index.d.ts +6 -0
  243. package/dist/commands/prd14/index.d.ts.map +1 -0
  244. package/dist/commands/prd14/index.js +6 -0
  245. package/dist/commands/prd14/index.js.map +1 -0
  246. package/dist/commands/prd15/index.d.ts +8 -0
  247. package/dist/commands/prd15/index.d.ts.map +1 -0
  248. package/dist/commands/prd15/index.js +152 -0
  249. package/dist/commands/prd15/index.js.map +1 -0
  250. package/dist/commands/registry.d.ts +19 -0
  251. package/dist/commands/registry.d.ts.map +1 -0
  252. package/dist/commands/registry.js +19 -0
  253. package/dist/commands/registry.js.map +1 -0
  254. package/dist/contracts/assetManifest.d.ts +80 -0
  255. package/dist/contracts/assetManifest.d.ts.map +1 -0
  256. package/dist/contracts/assetManifest.js +9 -0
  257. package/dist/contracts/assetManifest.js.map +1 -0
  258. package/dist/contracts/commands.d.ts +53 -0
  259. package/dist/contracts/commands.d.ts.map +1 -0
  260. package/dist/contracts/commands.js +37 -0
  261. package/dist/contracts/commands.js.map +1 -0
  262. package/dist/index.d.ts +17 -1
  263. package/dist/index.d.ts.map +1 -1
  264. package/dist/index.js +271 -71
  265. package/dist/index.js.map +1 -1
  266. package/dist/library-manifest.d.ts +86 -0
  267. package/dist/library-manifest.d.ts.map +1 -0
  268. package/dist/library-manifest.js +95 -0
  269. package/dist/library-manifest.js.map +1 -0
  270. package/dist/look/capture.d.ts +51 -0
  271. package/dist/look/capture.d.ts.map +1 -0
  272. package/dist/look/capture.js +229 -0
  273. package/dist/look/capture.js.map +1 -0
  274. package/dist/look/judge.d.ts +24 -0
  275. package/dist/look/judge.d.ts.map +1 -0
  276. package/dist/look/judge.js +151 -0
  277. package/dist/look/judge.js.map +1 -0
  278. package/dist/look/lint-static.d.ts +45 -0
  279. package/dist/look/lint-static.d.ts.map +1 -0
  280. package/dist/look/lint-static.js +241 -0
  281. package/dist/look/lint-static.js.map +1 -0
  282. package/dist/look/rubric.d.ts +70 -0
  283. package/dist/look/rubric.d.ts.map +1 -0
  284. package/dist/look/rubric.js +169 -0
  285. package/dist/look/rubric.js.map +1 -0
  286. package/dist/meshy/import.d.ts +7 -1
  287. package/dist/meshy/import.d.ts.map +1 -1
  288. package/dist/meshy/import.js +80 -6
  289. package/dist/meshy/import.js.map +1 -1
  290. package/dist/migrate-three/CompatibilityWarnings.d.ts +6 -0
  291. package/dist/migrate-three/CompatibilityWarnings.d.ts.map +1 -0
  292. package/dist/migrate-three/CompatibilityWarnings.js +24 -0
  293. package/dist/migrate-three/CompatibilityWarnings.js.map +1 -0
  294. package/dist/migrate-three/ImportMap.d.ts +19 -0
  295. package/dist/migrate-three/ImportMap.d.ts.map +1 -0
  296. package/dist/migrate-three/ImportMap.js +35 -0
  297. package/dist/migrate-three/ImportMap.js.map +1 -0
  298. package/dist/migrate-three/R3fMigration.d.ts +32 -0
  299. package/dist/migrate-three/R3fMigration.d.ts.map +1 -0
  300. package/dist/migrate-three/R3fMigration.js +70 -0
  301. package/dist/migrate-three/R3fMigration.js.map +1 -0
  302. package/dist/migrate-three/ThreeToA3DAdapter.d.ts +8 -0
  303. package/dist/migrate-three/ThreeToA3DAdapter.d.ts.map +1 -0
  304. package/dist/migrate-three/ThreeToA3DAdapter.js +20 -0
  305. package/dist/migrate-three/ThreeToA3DAdapter.js.map +1 -0
  306. package/dist/migrate-three/emit.d.ts +21 -0
  307. package/dist/migrate-three/emit.d.ts.map +1 -0
  308. package/dist/migrate-three/emit.js +117 -0
  309. package/dist/migrate-three/emit.js.map +1 -0
  310. package/dist/migrate-three/mappings.d.ts +21 -0
  311. package/dist/migrate-three/mappings.d.ts.map +1 -0
  312. package/dist/migrate-three/mappings.js +42 -0
  313. package/dist/migrate-three/mappings.js.map +1 -0
  314. package/dist/migrate-three/parse.d.ts +20 -0
  315. package/dist/migrate-three/parse.d.ts.map +1 -0
  316. package/dist/migrate-three/parse.js +56 -0
  317. package/dist/migrate-three/parse.js.map +1 -0
  318. package/dist/migrate-three/report.d.ts +18 -0
  319. package/dist/migrate-three/report.d.ts.map +1 -0
  320. package/dist/migrate-three/report.js +16 -0
  321. package/dist/migrate-three/report.js.map +1 -0
  322. package/dist/pull-bridge/adapters.d.ts +1 -1
  323. package/dist/pull-bridge/adapters.d.ts.map +1 -1
  324. package/dist/pull-bridge/adapters.js +17 -4
  325. package/dist/pull-bridge/adapters.js.map +1 -1
  326. package/dist/pull-bridge/provenance.d.ts.map +1 -1
  327. package/dist/pull-bridge/provenance.js +3 -2
  328. package/dist/pull-bridge/provenance.js.map +1 -1
  329. package/dist/pull-bridge/pullable.d.ts.map +1 -1
  330. package/dist/pull-bridge/pullable.js +14 -3
  331. package/dist/pull-bridge/pullable.js.map +1 -1
  332. package/dist/pull-bridge/scoring.d.ts +36 -8
  333. package/dist/pull-bridge/scoring.d.ts.map +1 -1
  334. package/dist/pull-bridge/scoring.js +143 -47
  335. package/dist/pull-bridge/scoring.js.map +1 -1
  336. package/dist/pull-bridge/search.d.ts +2 -0
  337. package/dist/pull-bridge/search.d.ts.map +1 -1
  338. package/dist/pull-bridge/search.js +17 -10
  339. package/dist/pull-bridge/search.js.map +1 -1
  340. package/dist/pull-bridge.d.ts +2 -2
  341. package/dist/pull-bridge.d.ts.map +1 -1
  342. package/dist/pull-bridge.js +24 -8
  343. package/dist/pull-bridge.js.map +1 -1
  344. package/package.json +6 -3
  345. package/skills/agent-files/AGENTS.md +3 -0
  346. package/skills/aura3d-animation-studio/SKILL.md +153 -0
  347. package/skills/aura3d-animation-studio/references/shot-looks.md +26 -0
  348. package/skills/aura3d-art-direction/SKILL.md +84 -0
  349. package/skills/aura3d-art-direction/references/failure-gallery.md +64 -0
  350. package/skills/aura3d-art-direction/references/framing-and-shots.md +45 -0
  351. package/skills/aura3d-art-direction/references/look-recipes.md +32 -0
  352. package/skills/aura3d-art-direction/references/quality-bar.md +103 -0
  353. package/skills/aura3d-art-direction/references/reference-frames.md +82 -0
  354. package/skills/aura3d-assets/SKILL.md +132 -0
  355. package/skills/aura3d-assets/references/preview-under-look.md +26 -0
  356. package/skills/aura3d-browser-game/SKILL.md +127 -0
  357. package/skills/aura3d-browser-game/references/genre-looks.md +52 -0
  358. package/skills/aura3d-character-animation/SKILL.md +129 -0
  359. package/skills/aura3d-character-animation/references/stage-and-lighting.md +31 -0
  360. package/skills/aura3d-core/SKILL.md +121 -0
  361. package/skills/aura3d-core/references/boundaries.md +91 -0
  362. package/skills/aura3d-evidence-review/SKILL.md +106 -0
  363. package/skills/aura3d-game-art/SKILL.md +118 -0
  364. package/skills/aura3d-game-art/references/sheet-check.mjs +58 -0
  365. package/skills/aura3d-game-art/references/sprite-palettes.md +25 -0
  366. package/skills/aura3d-materials-environments/SKILL.md +139 -0
  367. package/skills/aura3d-performance/SKILL.md +97 -0
  368. package/skills/aura3d-retexture/SKILL.md +115 -0
  369. package/skills/aura3d-retexture/references/geometry-hash.mjs +89 -0
  370. package/skills/aura3d-scene-authoring/SKILL.md +132 -0
  371. package/skills/aura3d-scene-authoring/references/look-by-family.md +28 -0
  372. package/skills/aura3d-threejs-migration/SKILL.md +125 -0
  373. package/skills/aura3d-threejs-migration/references/look-mapping.md +27 -0
  374. package/skills/llms.txt +117 -0
  375. package/skills/manifest.json +163 -0
  376. package/skills/meshy-cli/SKILL.md +133 -0
@@ -0,0 +1,335 @@
1
+ /**
2
+ * PRD-05 §6.4 — visual-quality admission gates (Phase 0 slice).
3
+ *
4
+ * Pure functions over parsed glTF JSON + accessor counts. Implemented here:
5
+ * G1 (triangle band), G3 (PBR slot coverage), G4 (card ban), G5
6
+ * (programmer-art ban), G8 (tangents when normal-mapped), G11 (derived
7
+ * present). G2, G6, G7, G9, G10 landed in Phase 4 (`assets admit`) —
8
+ * measured-input gates, pure over the reports produced by admission/texel.ts
9
+ * and admission/textureStats.ts.
10
+ *
11
+ * "Rendered surface area" is approximated by primitive triangle counts —
12
+ * these functions intentionally take accessor counts, not vertex buffers, so
13
+ * they run on the JSON chunk alone.
14
+ */
15
+ import { isBuilderGenerator, isBuilderScriptPath } from "./builder-patterns.js";
16
+ import { profileForRole, requiresPbrTextures } from "./profiles.js";
17
+ function check(gate, verdict, measured, message) {
18
+ return { gate, verdict, measured, message };
19
+ }
20
+ /** G1 — LOD0 triangles within [floor, ceiling] of the role profile (§6.2). */
21
+ export function gateG1TriangleBand(model, profile) {
22
+ if (!profile || (profile.trianglesFloor === undefined && profile.trianglesCeiling === undefined)) {
23
+ return check("G1", "waived-by-role", { triangles: model.totalTriangles }, "G1: no triangle band for this role/profile.");
24
+ }
25
+ const triangles = model.totalTriangles;
26
+ const measured = { triangles, floor: profile.trianglesFloor, ceiling: profile.trianglesCeiling, profile: profile.id };
27
+ if (profile.trianglesFloor !== undefined && triangles < profile.trianglesFloor) {
28
+ return check("G1", "fail", measured, `G1: LOD0 ${triangles} tris below ${profile.id} floor ${profile.trianglesFloor}.`);
29
+ }
30
+ if (profile.trianglesCeiling !== undefined && triangles > profile.trianglesCeiling) {
31
+ return check("G1", "fail", measured, `G1: LOD0 ${triangles} tris above ${profile.id} ceiling ${profile.trianglesCeiling}.`);
32
+ }
33
+ return check("G1", "pass", measured, `G1: ${triangles} tris inside ${profile.id} band.`);
34
+ }
35
+ /**
36
+ * G3 — PBR completeness: TEXCOORD_0 + base colour + normal + metallic-
37
+ * roughness on ≥ 90 % of rendered area (occlusion required on non-skinned
38
+ * meshes, optional on skinned). Roles outside the PBR-required list record
39
+ * `waived-by-role`.
40
+ */
41
+ export function gateG3PbrCompleteness(model, role, profile, stylizedFlatApproved) {
42
+ if (!requiresPbrTextures(role, profile)) {
43
+ return check("G3", "waived-by-role", { role: role ?? "unknown", profile: profile?.id }, "G3: role does not require PBR texture coverage.");
44
+ }
45
+ if (stylizedFlatApproved) {
46
+ return check("G3", "pass", { stylizedFlatApproved: true, role: role ?? "unknown", profile: profile?.id }, "G3: approved stylized-flat artDirection + look-dev record exempts PBR coverage (G10).");
47
+ }
48
+ const total = model.totalTriangles;
49
+ const requiredOcclusion = !model.skinned;
50
+ let covered = 0;
51
+ let missingTexcoord = 0;
52
+ let missingSlots = 0;
53
+ for (const primitive of model.primitives) {
54
+ const material = primitive.materialIndex !== undefined ? model.materials[primitive.materialIndex] : undefined;
55
+ const hasTextures = primitive.hasTexcoord0 &&
56
+ material !== undefined &&
57
+ material.hasBaseColorTexture &&
58
+ material.hasNormalTexture &&
59
+ material.hasMetallicRoughnessTexture &&
60
+ (!requiredOcclusion || material.hasOcclusionTexture);
61
+ if (!primitive.hasTexcoord0)
62
+ missingTexcoord += primitive.triangleCount;
63
+ if (material !== undefined && !(material.hasBaseColorTexture && material.hasNormalTexture && material.hasMetallicRoughnessTexture && (!requiredOcclusion || material.hasOcclusionTexture))) {
64
+ missingSlots += primitive.triangleCount;
65
+ }
66
+ if (hasTextures)
67
+ covered += primitive.triangleCount;
68
+ }
69
+ const coverage = total > 0 ? covered / total : 0;
70
+ const measured = { coverage, covered, total, missingTexcoord, missingSlots, requiredOcclusion, profile: profile?.id };
71
+ return coverage >= 0.9
72
+ ? check("G3", "pass", measured, `G3: PBR slots on ${(coverage * 100).toFixed(1)}% of rendered area.`)
73
+ : check("G3", "fail", measured, `G3: PBR slots on ${(coverage * 100).toFixed(1)}% of rendered area (< 90%).`);
74
+ }
75
+ /**
76
+ * G4 — card ban. Fails when LOD0 ≤ 12 triangles, `KHR_materials_unlit` on
77
+ * > 10 % of area, or bounds thinness ratio min/max < 0.02 with ≤ 4 triangles.
78
+ * `backdrop`/`debug`/`abstract` roles are exempt.
79
+ */
80
+ export function gateG4CardBan(model, role) {
81
+ if (role === "backdrop" || role === "debug" || role === "abstract") {
82
+ return check("G4", "waived-by-role", { role }, "G4: role exempt from the card ban.");
83
+ }
84
+ const triangles = model.totalTriangles;
85
+ if (triangles <= 12) {
86
+ return check("G4", "fail", { triangles }, `G4: card geometry — LOD0 has only ${triangles} triangles (≤ 12).`);
87
+ }
88
+ let unlitTriangles = 0;
89
+ for (const primitive of model.primitives) {
90
+ const material = primitive.materialIndex !== undefined ? model.materials[primitive.materialIndex] : undefined;
91
+ if (material?.unlit)
92
+ unlitTriangles += primitive.triangleCount;
93
+ }
94
+ const unlitRatio = triangles > 0 ? unlitTriangles / triangles : 0;
95
+ if (unlitRatio > 0.1) {
96
+ return check("G4", "fail", { unlitRatio, unlitTriangles, triangles }, `G4: KHR_materials_unlit on ${(unlitRatio * 100).toFixed(1)}% of area (> 10%).`);
97
+ }
98
+ const size = model.boundsSize;
99
+ if (size && triangles <= 4) {
100
+ const maxDimension = Math.max(...size);
101
+ const minDimension = Math.min(...size);
102
+ const thinness = maxDimension > 0 ? minDimension / maxDimension : 0;
103
+ if (thinness < 0.02) {
104
+ return check("G4", "fail", { thinness, triangles, size }, `G4: thin card — bounds ratio ${thinness.toFixed(4)} < 0.02 with ${triangles} triangles.`);
105
+ }
106
+ }
107
+ return check("G4", "pass", { triangles, unlitRatio }, "G4: no card geometry detected.");
108
+ }
109
+ /**
110
+ * G5 — programmer-art ban. Fails when > 10 % of area lacks TEXCOORD_0, when
111
+ * every material is factor-only without an approved stylized-flat art
112
+ * direction, or when provenance/generator matches the in-repo builder list.
113
+ */
114
+ export function gateG5ProgrammerArt(model, entry) {
115
+ // Builder provenance is the strictest G5 subtype (caps at prototype + role
116
+ // proxy) — detect it even when the UV/factor checks would also fail, so the
117
+ // migration and admit verb can apply the right cap.
118
+ const builderSource = isBuilderScriptPath(entry.sourcePath) ? entry.sourcePath : undefined;
119
+ const builderGenerator = (isBuilderGenerator(model.generator) ? model.generator : undefined) ??
120
+ (isBuilderGenerator(entry.generationProvider) ? entry.generationProvider : undefined);
121
+ if (builderSource || builderGenerator) {
122
+ return {
123
+ ...check("G5", "fail", { builderSource, builderGenerator, generator: model.generator }, "G5: in-repo builder provenance — capped at prototype (role proxy allowed)."),
124
+ builderProvenance: true,
125
+ };
126
+ }
127
+ const total = model.totalTriangles;
128
+ let noUvTriangles = 0;
129
+ for (const primitive of model.primitives) {
130
+ if (!primitive.hasTexcoord0)
131
+ noUvTriangles += primitive.triangleCount;
132
+ }
133
+ const noUvRatio = total > 0 ? noUvTriangles / total : 0;
134
+ if (noUvRatio > 0.1) {
135
+ return { ...check("G5", "fail", { noUvRatio, noUvTriangles, total }, `G5: no TEXCOORD_0 on ${(noUvRatio * 100).toFixed(1)}% of area (> 10%).`) };
136
+ }
137
+ const allFactorOnly = model.materials.length > 0 && model.materials.every((material) => material.factorOnly);
138
+ if (allFactorOnly && !entry.stylizedFlatApproved) {
139
+ return { ...check("G5", "fail", { factorOnlyMaterials: model.materials.length, stylizedFlatApproved: entry.stylizedFlatApproved ?? false }, "G5: every material is factor-only with no approved stylized-flat art direction.") };
140
+ }
141
+ return { ...check("G5", "pass", { noUvRatio, generator: model.generator }, "G5: UVs present and no builder provenance.") };
142
+ }
143
+ /** G8 — every primitive whose material has a normal map must carry TANGENT. */
144
+ export function gateG8Tangents(model) {
145
+ const missing = [];
146
+ for (let index = 0; index < model.primitives.length; index += 1) {
147
+ const primitive = model.primitives[index];
148
+ const material = primitive.materialIndex !== undefined ? model.materials[primitive.materialIndex] : undefined;
149
+ if (material?.hasNormalTexture && !primitive.hasTangent)
150
+ missing.push(index);
151
+ }
152
+ return missing.length === 0
153
+ ? check("G8", "pass", { normalMapped: model.primitives.filter((p) => p.materialIndex !== undefined && model.materials[p.materialIndex]?.hasNormalTexture).length }, "G8: tangents present on every normal-mapped primitive.")
154
+ : check("G8", "fail", { missingPrimitives: missing }, `G8: ${missing.length} normal-mapped primitive(s) missing TANGENT.`);
155
+ }
156
+ /** G11 — `release` requires a `derived` record (or `optimize: "not-needed"` with measurements). */
157
+ export function gateG11Derived(entry) {
158
+ return entry.derivedPresent
159
+ ? check("G11", "pass", { derived: true }, "G11: derived record present.")
160
+ : check("G11", "fail", { derived: false }, "G11: no derived record — run `assets optimize` before release.");
161
+ }
162
+ const TEXEL_BAND = [0.5, 4];
163
+ /** G2 — median-area-triangle texels/screen-pixel within [0.5, 4] at the role camera. */
164
+ export function gateG2TexelDensity(model, profile, measured) {
165
+ void model;
166
+ if (profile === undefined || profile.gameplayCamera === undefined) {
167
+ return check("G2", "waived-by-role", { role: profile?.id }, "G2: no gameplay camera for this role.");
168
+ }
169
+ const report = measured.texelDensity;
170
+ if (!report || report.trianglesMeasured === 0 || report.p50 === undefined) {
171
+ return check("G2", "fail", { measured: report?.trianglesMeasured ?? 0 }, "G2: texel density not measurable — no UV+texture triangle coverage.");
172
+ }
173
+ const { p10, p50, p90 } = report;
174
+ const [lo, hi] = TEXEL_BAND;
175
+ const inBand = p50 >= lo && p50 <= hi;
176
+ const mobile = measured.texelDensityMobile;
177
+ const mobileOk = mobile === undefined || mobile.trianglesMeasured === 0 || (mobile.p50 !== undefined && mobile.p50 >= lo && mobile.p50 <= hi);
178
+ const floorOk = profile.texelFloorPxPerMeter === undefined || (report.texelsPerMeterP50 ?? 0) >= profile.texelFloorPxPerMeter;
179
+ const measuredRow = { p10, p50, p90, band: TEXEL_BAND, texelsPerMeterP50: report.texelsPerMeterP50, floor: profile.texelFloorPxPerMeter, camera: report.camera, textureSize: report.textureSize, mobile: mobile ? { p50: mobile.p50, viewport: `${mobile.camera.viewportWidth}×${mobile.camera.viewportHeight}` } : undefined };
180
+ return inBand && floorOk && mobileOk
181
+ ? check("G2", "pass", measuredRow, `G2: median ${p50.toFixed(2)} texels/px in band [${lo}, ${hi}].`)
182
+ : check("G2", "fail", measuredRow, `G2: ${!inBand ? `median ${p50.toFixed(2)} texels/px outside [${lo}, ${hi}]` : !mobileOk ? `mobile median ${mobile?.p50?.toFixed(2)} outside band` : `below ${profile.texelFloorPxPerMeter ?? "—"} px/m floor`}.`);
183
+ }
184
+ /** G6 — texture sanity on 256² decoded proxies. */
185
+ export function gateG6TextureSanity(profile, measured) {
186
+ const report = measured.textureSanity;
187
+ if (!report) {
188
+ return check("G6", "fail", {}, "G6: texture sanity not measured — run via `assets admit` (needs tools/asset-optimize deps).");
189
+ }
190
+ if (!report.available) {
191
+ return check("G6", "fail", { reason: report.unavailableReason }, `G6: texture decode unavailable — ${report.unavailableReason ?? "sharp missing"}.`);
192
+ }
193
+ if (report.textures.length === 0) {
194
+ // No textures at all: factor-only assets live or die by G5/G10, not G6.
195
+ return check("G6", "pass", { textures: 0 }, "G6: no textures to sanity-check.");
196
+ }
197
+ const failures = [];
198
+ const flags = [];
199
+ for (const tex of report.textures) {
200
+ const label = `${tex.slot}#${tex.materialIndex}${tex.materialName ? `(${tex.materialName})` : ""}`;
201
+ if (tex.error?.startsWith("undecodable")) {
202
+ // basisu/ktx2 in the measured file: the source proxy ran pre-encode.
203
+ continue;
204
+ }
205
+ if (tex.width > 0 && !tex.powerOfTwo)
206
+ failures.push(`${label}: non-power-of-two ${tex.width}×${tex.height}`);
207
+ if (tex.slot === "normal" && tex.normalLength) {
208
+ if (tex.normalLength.inUnitRange < 0.95)
209
+ failures.push(`${label}: normal length outside [0.9,1.1] on ${((1 - tex.normalLength.inUnitRange) * 100).toFixed(1)}% of texels (> 5%)`);
210
+ if (tex.normalLength.meanBlue < 0.7)
211
+ failures.push(`${label}: mean B ${tex.normalLength.meanBlue.toFixed(2)} < 0.7 (not a valid tangent-space normal map)`);
212
+ }
213
+ if (tex.slot === "metallicRoughness" && tex.constantChannels && tex.constantChannels.length >= 3) {
214
+ flags.push(`${label}: all ORM channels constant — replace texture with factor`);
215
+ }
216
+ else if (tex.constantChannels) {
217
+ for (const c of tex.constantChannels)
218
+ flags.push(`${label}: channel ${c} constant (σ<0.004) — replace texture with factor`);
219
+ }
220
+ if (tex.slot === "baseColor" && tex.luminance) {
221
+ const metal = materialsAreMetal(measured, tex.materialIndex);
222
+ const floor = metal ? 140 : 30;
223
+ if (tex.luminance.inRange30to240 < 0.95 && !metal) {
224
+ failures.push(`${label}: sRGB luminance outside [30,240] on ${((1 - tex.luminance.inRange30to240) * 100).toFixed(1)}% of texels`);
225
+ }
226
+ else if (metal && tex.luminance.mean < floor) {
227
+ failures.push(`${label}: metal base colour mean luminance ${tex.luminance.mean.toFixed(0)} < 140`);
228
+ }
229
+ }
230
+ }
231
+ void profile;
232
+ const measuredRow = { failures, flags, textures: report.textures.length };
233
+ return failures.length === 0
234
+ ? check("G6", "pass", measuredRow, `G6: ${report.textures.length} texture slot(s) sane${flags.length ? ` (${flags.length} constant-channel flags)` : ""}.`)
235
+ : check("G6", "fail", measuredRow, `G6: ${failures.join("; ")}`);
236
+ }
237
+ /** Metal determination for a material: ORM median metallic ≥ 0.9 or factor ≥ 0.9. */
238
+ function materialsAreMetal(measured, materialIndex) {
239
+ const orm = measured.textureSanity?.textures.find((t) => t.slot === "metallicRoughness" && t.materialIndex === materialIndex);
240
+ const bMedian = orm?.channels?.[2]?.mean;
241
+ return bMedian !== undefined && bMedian / 255 >= 0.9;
242
+ }
243
+ /** G7 — derived file bytes + GPU bytes + draw calls within the §17.2 role budget. */
244
+ export function gateG7Budget(profile, measured) {
245
+ if (profile === undefined || profile.fileBytesHigh === undefined) {
246
+ return check("G7", "waived-by-role", { profile: profile?.id }, "G7: no budget for this role.");
247
+ }
248
+ const fileBytes = measured.derivedFileBytes;
249
+ if (fileBytes === undefined) {
250
+ return check("G7", "fail", {}, "G7: no derived measurement — run `assets optimize` first.");
251
+ }
252
+ const over = [];
253
+ if (fileBytes > profile.fileBytesHigh)
254
+ over.push(`file ${Math.round(fileBytes / 1e6 * 10) / 10} MB > ${Math.round(profile.fileBytesHigh / 1e6)} MB`);
255
+ if (measured.gpuBytesHigh !== undefined && profile.gpuBytesHigh !== undefined && measured.gpuBytesHigh > profile.gpuBytesHigh) {
256
+ over.push(`gpu ${Math.round(measured.gpuBytesHigh / 1e6 * 10) / 10} MB > ${Math.round(profile.gpuBytesHigh / 1e6)} MB`);
257
+ }
258
+ const measuredRow = { fileBytes, fileBytesHigh: profile.fileBytesHigh, gpuBytesHigh: measured.gpuBytesHigh, gpuBudget: profile.gpuBytesHigh, drawCalls: measured.drawCalls };
259
+ return over.length === 0
260
+ ? check("G7", "pass", measuredRow, `G7: file ${Math.round(fileBytes / 1e3)} KB within ${profile.id} budget.`)
261
+ : check("G7", "fail", measuredRow, `G7: over ${profile.id} budget — ${over.join(", ")}.`);
262
+ }
263
+ const G9_AXES = ["silhouette", "surfaceDetail", "materialBelievability", "texelSharpness", "lodTransitions", "artefacts"];
264
+ export function gateG9LookDev(entry, profile, measured) {
265
+ const record = measured.lookDev;
266
+ if (!record || record.reviews.length === 0) {
267
+ return check("G9", "fail", { reviews: 0 }, "G9: no look-dev record — run `assets lookdev` + `assets review`.");
268
+ }
269
+ const boundHash = record.derivedHash;
270
+ // Reviews bound to the current derived hash only.
271
+ const threeReviews = record.reviews.filter((r) => r.judge?.kind === "vision-model");
272
+ const humanReviews = record.reviews.filter((r) => r.judge?.kind === "human" && r.verdict === "accept");
273
+ const scored = threeReviews.filter((r) => r.score !== undefined);
274
+ if (scored.length === 0) {
275
+ return check("G9", "fail", { reviews: record.reviews.length, boundHash }, "G9: no vision-model score on record.");
276
+ }
277
+ const meanScore = scored.reduce((s, r) => s + (r.score ?? 0), 0) / scored.length;
278
+ const minAxis = Math.min(...scored.flatMap((r) => G9_AXES.map((a) => r.axes?.[a] ?? 10)));
279
+ const hero = profile !== undefined && (profile.id === "hero-character" || profile.id === "hero-vehicle" || entry.role === "hero");
280
+ const humanRequired = hero;
281
+ const fails = [];
282
+ if (meanScore < 6.5)
283
+ fails.push(`three-adapter score ${meanScore.toFixed(2)} < 6.5`);
284
+ if (minAxis < 4)
285
+ fails.push(`axis ${minAxis.toFixed(1)} < 4`);
286
+ if (humanRequired && humanReviews.length === 0)
287
+ fails.push("hero role requires a named human review");
288
+ if (scored.some((r) => r.verdict !== "accept"))
289
+ fails.push("latest reviews include a reject verdict");
290
+ const gap = measured.auraScore !== undefined ? meanScore - measured.auraScore : undefined;
291
+ const rendererIssue = gap !== undefined && gap > 1.5;
292
+ const measuredRow = { meanScore, minAxis, reviews: scored.length, humanReviews: humanReviews.length, boundHash, auraScore: measured.auraScore, auraMinusThreeGap: gap, rendererIssue };
293
+ const result = fails.length === 0
294
+ ? check("G9", "pass", measuredRow, `G9: look-dev score ${meanScore.toFixed(2)} (axes ≥ ${minAxis.toFixed(1)}${humanReviews.length ? ", human-reviewed" : ""}).`)
295
+ : check("G9", "fail", measuredRow, `G9: ${fails.join("; ")}.`);
296
+ return rendererIssue ? { ...result, rendererIssue: true } : result;
297
+ }
298
+ /** G10 — art-direction document exists; `stylized-flat` additionally needs UVs + human review. */
299
+ export function gateG10ArtDirection(model, entry, measured) {
300
+ if (entry.artDirection === undefined) {
301
+ return check("G10", "fail", {}, "G10: release assets require an `artDirection` id (assets/art-direction/<id>.json).");
302
+ }
303
+ const doc = measured.artDirectionDoc;
304
+ if (!doc) {
305
+ return check("G10", "fail", { artDirection: entry.artDirection }, `G10: no assets/art-direction/${entry.artDirection}.json file.`);
306
+ }
307
+ const measuredRow = { artDirection: entry.artDirection, shading: doc.shading, palette: doc.palette?.length ?? 0, texelDensity: doc.texelDensity };
308
+ if (doc.shading === "stylized-flat") {
309
+ if (!entry.stylizedFlatApproved) {
310
+ return check("G10", "fail", measuredRow, "G10: stylized-flat requires the approved look-dev record on the current hash.");
311
+ }
312
+ const noUv = model.primitives.some((p) => p.triangleCount > 0 && !p.hasTexcoord0);
313
+ if (noUv)
314
+ return check("G10", "fail", measuredRow, "G10: stylized-flat still requires TEXCOORD_0 on every rendered primitive.");
315
+ }
316
+ return check("G10", "pass", measuredRow, `G10: art direction "${entry.artDirection}" (${doc.shading ?? "unspecified shading"}) on file.`);
317
+ }
318
+ /** Runs all admission gates; measured gates need `measured` inputs (Phase 4). */
319
+ export function runAdmissionGates(model, entry, measured = {}) {
320
+ const profile = profileForRole(entry.role, model.boundsSize);
321
+ return [
322
+ gateG1TriangleBand(model, profile),
323
+ gateG2TexelDensity(model, profile, measured),
324
+ gateG3PbrCompleteness(model, entry.role, profile, entry.stylizedFlatApproved),
325
+ gateG4CardBan(model, entry.role),
326
+ gateG5ProgrammerArt(model, entry),
327
+ gateG6TextureSanity(profile, measured),
328
+ gateG7Budget(profile, measured),
329
+ gateG8Tangents(model),
330
+ gateG9LookDev(entry, profile, measured),
331
+ gateG10ArtDirection(model, entry, measured),
332
+ gateG11Derived(entry),
333
+ ];
334
+ }
335
+ //# sourceMappingURL=gates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gates.js","sourceRoot":"","sources":["../../../../../packages/aura3d-cli/src/admission/gates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * GLB/glTF → `AdmissionModel` projection (PRD-05 §6.4 Phase 0).
3
+ *
4
+ * Reads the JSON chunk only — accessor `count`/`min`/`max` already declare
5
+ * everything the Phase-0 gates measure (triangle counts, TEXCOORD_0/TANGENT
6
+ * presence, POSITION bounds). The binary chunk is never touched.
7
+ */
8
+ import type { AdmissionModel } from "./gates.js";
9
+ interface GltfAccessorLike {
10
+ readonly count?: number;
11
+ readonly min?: readonly number[];
12
+ readonly max?: readonly number[];
13
+ }
14
+ interface GltfTextureInfoLike {
15
+ readonly extensions?: Readonly<Record<string, unknown>>;
16
+ }
17
+ interface GltfMaterialLike {
18
+ readonly name?: string;
19
+ readonly pbrMetallicRoughness?: {
20
+ readonly baseColorTexture?: GltfTextureInfoLike;
21
+ readonly metallicRoughnessTexture?: GltfTextureInfoLike;
22
+ };
23
+ readonly normalTexture?: GltfTextureInfoLike;
24
+ readonly occlusionTexture?: GltfTextureInfoLike;
25
+ readonly emissiveTexture?: GltfTextureInfoLike;
26
+ readonly extensions?: Readonly<Record<string, unknown>>;
27
+ }
28
+ interface GltfPrimitiveLike {
29
+ readonly attributes?: Readonly<Record<string, number>>;
30
+ readonly indices?: number;
31
+ readonly material?: number;
32
+ readonly mode?: number;
33
+ }
34
+ export interface AdmissionGltfJson {
35
+ readonly asset?: {
36
+ readonly generator?: string;
37
+ };
38
+ readonly accessors?: readonly GltfAccessorLike[];
39
+ readonly materials?: readonly GltfMaterialLike[];
40
+ readonly meshes?: readonly {
41
+ readonly primitives?: readonly GltfPrimitiveLike[];
42
+ }[];
43
+ readonly nodes?: readonly {
44
+ readonly mesh?: number;
45
+ readonly skin?: number;
46
+ }[];
47
+ readonly skins?: readonly {
48
+ readonly joints?: readonly number[];
49
+ }[];
50
+ }
51
+ /** Parses a GLB buffer into `{ json, bin }`; `bin` is undefined when the file carries no binary chunk. */
52
+ export declare function parseGlbChunks(buffer: Buffer): {
53
+ readonly json: AdmissionGltfJson;
54
+ readonly bin?: Buffer;
55
+ };
56
+ /** Reads a `.glb`/`.gltf` file into admission-parsed glTF JSON. */
57
+ export declare function readAdmissionGltf(path: string): {
58
+ readonly json: AdmissionGltfJson;
59
+ readonly bin?: Buffer;
60
+ };
61
+ /** Projects parsed glTF JSON into the admission gate input. */
62
+ export declare function admissionModelFromGltf(json: AdmissionGltfJson): AdmissionModel;
63
+ export {};
64
+ //# sourceMappingURL=glb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glb.d.ts","sourceRoot":"","sources":["../../../../../packages/aura3d-cli/src/admission/glb.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAqB,cAAc,EAAsB,MAAM,YAAY,CAAC;AAExF,UAAU,gBAAgB;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAED,UAAU,mBAAmB;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACzD;AAED,UAAU,gBAAgB;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,oBAAoB,CAAC,EAAE;QAC9B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,mBAAmB,CAAC;QAChD,QAAQ,CAAC,wBAAwB,CAAC,EAAE,mBAAmB,CAAC;KACzD,CAAC;IACF,QAAQ,CAAC,aAAa,CAAC,EAAE,mBAAmB,CAAC;IAC7C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,mBAAmB,CAAC;IAChD,QAAQ,CAAC,eAAe,CAAC,EAAE,mBAAmB,CAAC;IAC/C,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACzD;AAED,UAAU,iBAAiB;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjD,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACjD,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACjD,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS;QAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAA;KAAE,EAAE,CAAC;IACpF,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS;QAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC/E,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS;QAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,EAAE,CAAC;CACrE;AAKD,0GAA0G;AAC1G,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAqB1G;AAED,mEAAmE;AACnE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAG3G;AA+BD,+DAA+D;AAC/D,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,iBAAiB,GAAG,cAAc,CAqD9E"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * GLB/glTF → `AdmissionModel` projection (PRD-05 §6.4 Phase 0).
3
+ *
4
+ * Reads the JSON chunk only — accessor `count`/`min`/`max` already declare
5
+ * everything the Phase-0 gates measure (triangle counts, TEXCOORD_0/TANGENT
6
+ * presence, POSITION bounds). The binary chunk is never touched.
7
+ */
8
+ import { readFileSync } from "node:fs";
9
+ const GLB_MAGIC = 0x46546c67; // "glTF" little-endian
10
+ const GLB_BIN_CHUNK = 0x004e4942; // "BIN\0"
11
+ /** Parses a GLB buffer into `{ json, bin }`; `bin` is undefined when the file carries no binary chunk. */
12
+ export function parseGlbChunks(buffer) {
13
+ if (buffer.length < 20 || buffer.readUInt32LE(0) !== GLB_MAGIC) {
14
+ throw new Error("Invalid GLB header. Suggested fix: re-export the asset as binary glTF (.glb).");
15
+ }
16
+ const declared = buffer.readUInt32LE(8);
17
+ if (declared > buffer.length)
18
+ throw new Error("Invalid GLB length. Suggested fix: run assets validate on the original export.");
19
+ const chunkLength = buffer.readUInt32LE(12);
20
+ if (buffer.toString("utf8", 16, 20) !== "JSON")
21
+ throw new Error("Invalid GLB JSON chunk. Suggested fix: re-export the GLB.");
22
+ const json = JSON.parse(buffer.toString("utf8", 20, 20 + chunkLength).trim());
23
+ let offset = 20 + chunkLength;
24
+ let bin;
25
+ while (offset + 8 <= buffer.length && offset + 8 <= declared) {
26
+ const length = buffer.readUInt32LE(offset);
27
+ const type = buffer.readUInt32LE(offset + 4);
28
+ if (type === GLB_BIN_CHUNK) {
29
+ bin = buffer.subarray(offset + 8, offset + 8 + length);
30
+ break;
31
+ }
32
+ offset += 8 + length;
33
+ }
34
+ return { json, bin };
35
+ }
36
+ /** Reads a `.glb`/`.gltf` file into admission-parsed glTF JSON. */
37
+ export function readAdmissionGltf(path) {
38
+ if (path.toLowerCase().endsWith(".glb"))
39
+ return parseGlbChunks(readFileSync(path));
40
+ return { json: JSON.parse(readFileSync(path, "utf8")) };
41
+ }
42
+ function hasTextureReference(info) {
43
+ if (!info)
44
+ return false;
45
+ // KHR_texture_basisu rewrites live under extensions.
46
+ return info.extensions?.KHR_texture_basisu !== undefined || "index" in info;
47
+ }
48
+ function toAdmissionMaterial(material) {
49
+ if (!material) {
50
+ return { hasBaseColorTexture: false, hasNormalTexture: false, hasMetallicRoughnessTexture: false, hasOcclusionTexture: false, factorOnly: true, unlit: false };
51
+ }
52
+ const pbr = material.pbrMetallicRoughness;
53
+ const hasBaseColorTexture = hasTextureReference(pbr?.baseColorTexture);
54
+ const hasNormalTexture = hasTextureReference(material.normalTexture);
55
+ const hasMetallicRoughnessTexture = hasTextureReference(pbr?.metallicRoughnessTexture);
56
+ const hasOcclusionTexture = hasTextureReference(material.occlusionTexture);
57
+ const hasEmissiveTexture = hasTextureReference(material.emissiveTexture);
58
+ const unlit = material.extensions?.KHR_materials_unlit !== undefined;
59
+ const factorOnly = !hasBaseColorTexture && !hasNormalTexture && !hasMetallicRoughnessTexture && !hasOcclusionTexture && !hasEmissiveTexture;
60
+ return {
61
+ name: material.name,
62
+ hasBaseColorTexture,
63
+ hasNormalTexture,
64
+ hasMetallicRoughnessTexture,
65
+ hasOcclusionTexture,
66
+ factorOnly,
67
+ unlit,
68
+ };
69
+ }
70
+ /** Projects parsed glTF JSON into the admission gate input. */
71
+ export function admissionModelFromGltf(json) {
72
+ const accessors = json.accessors ?? [];
73
+ const primitives = [];
74
+ let skinnedMesh = false;
75
+ const skinnedMeshIndexes = new Set();
76
+ for (const node of json.nodes ?? []) {
77
+ if (node.mesh !== undefined && node.skin !== undefined)
78
+ skinnedMeshIndexes.add(node.mesh);
79
+ }
80
+ const boundsMin = [Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY];
81
+ const boundsMax = [Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY];
82
+ let hasBounds = false;
83
+ (json.meshes ?? []).forEach((mesh, meshIndex) => {
84
+ for (const primitive of mesh.primitives ?? []) {
85
+ const attributes = primitive.attributes ?? {};
86
+ const positionAccessor = typeof attributes.POSITION === "number" ? accessors[attributes.POSITION] : undefined;
87
+ if (positionAccessor?.min && positionAccessor.max && positionAccessor.min.length >= 3 && positionAccessor.max.length >= 3) {
88
+ hasBounds = true;
89
+ for (let axis = 0; axis < 3; axis += 1) {
90
+ boundsMin[axis] = Math.min(boundsMin[axis], positionAccessor.min[axis] ?? Number.POSITIVE_INFINITY);
91
+ boundsMax[axis] = Math.max(boundsMax[axis], positionAccessor.max[axis] ?? Number.NEGATIVE_INFINITY);
92
+ }
93
+ }
94
+ if (primitive.material !== undefined && skinnedMeshIndexes.has(meshIndex))
95
+ skinnedMesh = true;
96
+ const indexAccessor = typeof primitive.indices === "number" ? accessors[primitive.indices] : undefined;
97
+ const mode = primitive.mode ?? 4;
98
+ // Non-triangle primitive modes contribute no triangles to the band.
99
+ const triangleCount = mode !== 4
100
+ ? 0
101
+ : indexAccessor?.count !== undefined
102
+ ? Math.floor(indexAccessor.count / 3)
103
+ : positionAccessor?.count !== undefined
104
+ ? Math.floor(positionAccessor.count / 3)
105
+ : 0;
106
+ primitives.push({
107
+ triangleCount,
108
+ materialIndex: primitive.material,
109
+ hasTexcoord0: attributes.TEXCOORD_0 !== undefined,
110
+ hasTangent: attributes.TANGENT !== undefined,
111
+ });
112
+ }
113
+ if (skinnedMeshIndexes.has(meshIndex))
114
+ skinnedMesh = true;
115
+ });
116
+ const totalTriangles = primitives.reduce((total, primitive) => total + primitive.triangleCount, 0);
117
+ return {
118
+ generator: json.asset?.generator,
119
+ primitives,
120
+ materials: (json.materials ?? []).map(toAdmissionMaterial),
121
+ skinned: skinnedMesh || (json.skins?.length ?? 0) > 0,
122
+ totalTriangles,
123
+ boundsSize: hasBounds
124
+ ? [boundsMax[0] - boundsMin[0], boundsMax[1] - boundsMin[1], boundsMax[2] - boundsMin[2]]
125
+ : undefined,
126
+ };
127
+ }
128
+ //# sourceMappingURL=glb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glb.js","sourceRoot":"","sources":["../../../../../packages/aura3d-cli/src/admission/glb.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export * from "./profiles.js";
2
+ export * from "./builder-patterns.js";
3
+ export * from "./gates.js";
4
+ export * from "./glb.js";
5
+ export * from "./artDirection.js";
6
+ export * from "./audio.js";
7
+ export * from "./qrFlags.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/aura3d-cli/src/admission/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,8 @@
1
+ export * from "./profiles.js";
2
+ export * from "./builder-patterns.js";
3
+ export * from "./gates.js";
4
+ export * from "./glb.js";
5
+ export * from "./artDirection.js";
6
+ export * from "./audio.js";
7
+ export * from "./qrFlags.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/aura3d-cli/src/admission/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"}