@hypersoniclabs/helix-cli 0.1.7 → 0.1.23

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 (1715) hide show
  1. package/README.md +627 -6
  2. package/assets/bridge/metahuman-eye-baked.png +0 -0
  3. package/assets/item-def-sounds/Common/A_DryShot.ogg +0 -0
  4. package/assets/item-def-sounds/Common/A_LMG_CloseCoverA.ogg +0 -0
  5. package/assets/item-def-sounds/Common/A_LMG_CloseCoverB.ogg +0 -0
  6. package/assets/item-def-sounds/Common/A_LMG_InsertMag.ogg +0 -0
  7. package/assets/item-def-sounds/Common/A_LMG_RemoveMag.ogg +0 -0
  8. package/assets/item-def-sounds/Common/A_Pistol_InsertMag_001.ogg +0 -0
  9. package/assets/item-def-sounds/Common/A_Pistol_InsertMag_002.ogg +0 -0
  10. package/assets/item-def-sounds/Common/A_Pistol_InsertMag_003.ogg +0 -0
  11. package/assets/item-def-sounds/Common/A_Pistol_RemoveMag_001.ogg +0 -0
  12. package/assets/item-def-sounds/Common/A_Pistol_RemoveMag_002.ogg +0 -0
  13. package/assets/item-def-sounds/Common/A_Pistol_RemoveMag_003.ogg +0 -0
  14. package/assets/item-def-sounds/Common/A_Rifle_ChargingHandle_001.ogg +0 -0
  15. package/assets/item-def-sounds/Common/A_Rifle_ChargingHandle_002.ogg +0 -0
  16. package/assets/item-def-sounds/Common/A_Rifle_ChargingHandle_003.ogg +0 -0
  17. package/assets/item-def-sounds/Common/A_Rifle_InsertMag_001.ogg +0 -0
  18. package/assets/item-def-sounds/Common/A_Rifle_InsertMag_002.ogg +0 -0
  19. package/assets/item-def-sounds/Common/A_Rifle_InsertMag_003.ogg +0 -0
  20. package/assets/item-def-sounds/Common/A_Rifle_RemoveMag_001.ogg +0 -0
  21. package/assets/item-def-sounds/Common/A_Rifle_RemoveMag_002.ogg +0 -0
  22. package/assets/item-def-sounds/Common/A_Rifle_RemoveMag_003.ogg +0 -0
  23. package/assets/item-def-sounds/Common/A_SMG_ChargingHandle_001.ogg +0 -0
  24. package/assets/item-def-sounds/Common/A_SMG_ChargingHandle_002.ogg +0 -0
  25. package/assets/item-def-sounds/Common/A_SMG_ChargingHandle_003.ogg +0 -0
  26. package/assets/item-def-sounds/Common/A_Sniper_ChargingHandle.ogg +0 -0
  27. package/assets/item-def-sounds/Common/A_Sniper_RemoveMag_001.ogg +0 -0
  28. package/assets/item-def-sounds/Common/A_Sniper_RemoveMag_002.ogg +0 -0
  29. package/assets/item-def-sounds/Common/A_Sniper_RemoveMag_003.ogg +0 -0
  30. package/assets/item-def-sounds/Explosions/Explosions_Grenade_Punch-Close_01.ogg +0 -0
  31. package/assets/item-def-sounds/Explosions/Explosions_Grenade_Punch-Close_02.ogg +0 -0
  32. package/assets/item-def-sounds/Explosions/Explosions_Grenade_Punch-Close_03.ogg +0 -0
  33. package/assets/item-def-sounds/LMG/A_LWS-32_Shot_001.ogg +0 -0
  34. package/assets/item-def-sounds/LMG/A_LWS-32_Shot_002.ogg +0 -0
  35. package/assets/item-def-sounds/LMG/A_LWS-32_Shot_003.ogg +0 -0
  36. package/assets/item-def-sounds/Pistol/A_Gaston_Shot_001.ogg +0 -0
  37. package/assets/item-def-sounds/Pistol/A_Gaston_Shot_002.ogg +0 -0
  38. package/assets/item-def-sounds/Pistol/A_Gaston_Shot_003.ogg +0 -0
  39. package/assets/item-def-sounds/Rifle/A_KAL_Shot_001.ogg +0 -0
  40. package/assets/item-def-sounds/Rifle/A_KAL_Shot_002.ogg +0 -0
  41. package/assets/item-def-sounds/Rifle/A_KAL_Shot_003.ogg +0 -0
  42. package/assets/item-def-sounds/SMG/A_Bison_InsertMag.ogg +0 -0
  43. package/assets/item-def-sounds/SMG/A_Bison_RemoveMag.ogg +0 -0
  44. package/assets/item-def-sounds/SMG/A_Bison_Shot_001.ogg +0 -0
  45. package/assets/item-def-sounds/SMG/A_Bison_Shot_002.ogg +0 -0
  46. package/assets/item-def-sounds/SMG/A_Bison_Shot_003.ogg +0 -0
  47. package/assets/item-def-sounds/Shotgun/A_DB-12_Shot_001.ogg +0 -0
  48. package/assets/item-def-sounds/Shotgun/A_DB-12_Shot_002.ogg +0 -0
  49. package/assets/item-def-sounds/Shotgun/A_DB-12_Shot_003.ogg +0 -0
  50. package/assets/item-def-sounds/Sniper/A_CS-446_Shot_001.ogg +0 -0
  51. package/assets/item-def-sounds/Sniper/A_CS-446_Shot_002.ogg +0 -0
  52. package/assets/item-def-sounds/Sniper/A_CS-446_Shot_003.ogg +0 -0
  53. package/bridge-plugins/helix.bridge.unreal/bin/unreal-skeletal-mesh-extract.js +812 -0
  54. package/bridge-plugins/helix.bridge.unreal/bridge-plugin.json +40 -0
  55. package/bridge-plugins/helix.bridge.unreal/test/exporter.test.js +418 -0
  56. package/bridge-plugins/helix.bridge.unreal/test/handler.test.js +417 -0
  57. package/bridge-plugins/helix.bridge.unreal/unreal/export_skeletal_mesh.py +384 -0
  58. package/bridge-recipes/cyberpunk/cyberpunk-female-bone-map.json +476 -0
  59. package/bridge-recipes/sims4/README.md +43 -0
  60. package/bridge-recipes/sims4/sims4-female-bone-map.json +65 -0
  61. package/bridge-recipes/unreal/character-customizer/README.md +58 -0
  62. package/bridge-recipes/unreal/character-customizer/all.json +13 -0
  63. package/bridge-recipes/unreal/character-customizer/base-male-body.json +6 -0
  64. package/bridge-recipes/unreal/character-customizer/base-male-head.json +6 -0
  65. package/bridge-recipes/unreal/character-customizer/beard.addon.json +1 -0
  66. package/bridge-recipes/unreal/character-customizer/beard.json +6 -0
  67. package/bridge-recipes/unreal/character-customizer/bottom.addon.json +1 -0
  68. package/bridge-recipes/unreal/character-customizer/bottom.json +6 -0
  69. package/bridge-recipes/unreal/character-customizer/eyewear.addon.json +1 -0
  70. package/bridge-recipes/unreal/character-customizer/eyewear.json +6 -0
  71. package/bridge-recipes/unreal/character-customizer/footwear.addon.json +1 -0
  72. package/bridge-recipes/unreal/character-customizer/footwear.json +6 -0
  73. package/bridge-recipes/unreal/character-customizer/hair.addon.json +1 -0
  74. package/bridge-recipes/unreal/character-customizer/hair.json +6 -0
  75. package/bridge-recipes/unreal/character-customizer/test/recipes.test.js +74 -0
  76. package/bridge-recipes/unreal/character-customizer/top.addon.json +1 -0
  77. package/bridge-recipes/unreal/character-customizer/top.json +6 -0
  78. package/bridge-recipes/unreal/helix-character-creator-female/README.md +57 -0
  79. package/bridge-recipes/unreal/helix-character-creator-female/all.json +18 -0
  80. package/bridge-recipes/unreal/helix-character-creator-female/back.addon.json +1 -0
  81. package/bridge-recipes/unreal/helix-character-creator-female/back.json +1 -0
  82. package/bridge-recipes/unreal/helix-character-creator-female/base-female-face.json +1 -0
  83. package/bridge-recipes/unreal/helix-character-creator-female/base-female.json +1 -0
  84. package/bridge-recipes/unreal/helix-character-creator-female/bottom.addon.json +1 -0
  85. package/bridge-recipes/unreal/helix-character-creator-female/bottom.json +1 -0
  86. package/bridge-recipes/unreal/helix-character-creator-female/eyewear.addon.json +1 -0
  87. package/bridge-recipes/unreal/helix-character-creator-female/eyewear.json +1 -0
  88. package/bridge-recipes/unreal/helix-character-creator-female/female-basic-t-shirt.addon.json +1 -0
  89. package/bridge-recipes/unreal/helix-character-creator-female/female-basic-t-shirt.json +1 -0
  90. package/bridge-recipes/unreal/helix-character-creator-female/female-batch-hair.json +23 -0
  91. package/bridge-recipes/unreal/helix-character-creator-female/female-batch-nebula-urbanghost.json +7 -0
  92. package/bridge-recipes/unreal/helix-character-creator-female/female-batch-singles.json +19 -0
  93. package/bridge-recipes/unreal/helix-character-creator-female/female-batch5.json +19 -0
  94. package/bridge-recipes/unreal/helix-character-creator-female/female-batch6.json +19 -0
  95. package/bridge-recipes/unreal/helix-character-creator-female/female-batch7.json +11 -0
  96. package/bridge-recipes/unreal/helix-character-creator-female/female-cap-2.addon.json +1 -0
  97. package/bridge-recipes/unreal/helix-character-creator-female/female-cap-2.json +1 -0
  98. package/bridge-recipes/unreal/helix-character-creator-female/female-cap.addon.json +1 -0
  99. package/bridge-recipes/unreal/helix-character-creator-female/female-cap.json +1 -0
  100. package/bridge-recipes/unreal/helix-character-creator-female/female-cargo-pants.addon.json +1 -0
  101. package/bridge-recipes/unreal/helix-character-creator-female/female-cargo-pants.json +1 -0
  102. package/bridge-recipes/unreal/helix-character-creator-female/female-carnival-mask-3.addon.json +1 -0
  103. package/bridge-recipes/unreal/helix-character-creator-female/female-carnival-mask-3.json +1 -0
  104. package/bridge-recipes/unreal/helix-character-creator-female/female-chain.addon.json +1 -0
  105. package/bridge-recipes/unreal/helix-character-creator-female/female-chain.json +1 -0
  106. package/bridge-recipes/unreal/helix-character-creator-female/female-clare-pants.addon.json +1 -0
  107. package/bridge-recipes/unreal/helix-character-creator-female/female-clare-pants.json +1 -0
  108. package/bridge-recipes/unreal/helix-character-creator-female/female-clare-shoes.addon.json +1 -0
  109. package/bridge-recipes/unreal/helix-character-creator-female/female-clare-shoes.json +1 -0
  110. package/bridge-recipes/unreal/helix-character-creator-female/female-clare-top.addon.json +1 -0
  111. package/bridge-recipes/unreal/helix-character-creator-female/female-clare-top.json +1 -0
  112. package/bridge-recipes/unreal/helix-character-creator-female/female-compression-bodysuit-2.addon.json +1 -0
  113. package/bridge-recipes/unreal/helix-character-creator-female/female-compression-bodysuit-2.json +1 -0
  114. package/bridge-recipes/unreal/helix-character-creator-female/female-compression-bodysuit.addon.json +1 -0
  115. package/bridge-recipes/unreal/helix-character-creator-female/female-compression-bodysuit.json +1 -0
  116. package/bridge-recipes/unreal/helix-character-creator-female/female-eye-hole-mask-2.addon.json +1 -0
  117. package/bridge-recipes/unreal/helix-character-creator-female/female-eye-hole-mask-2.json +1 -0
  118. package/bridge-recipes/unreal/helix-character-creator-female/female-eye-patch.addon.json +1 -0
  119. package/bridge-recipes/unreal/helix-character-creator-female/female-eye-patch.json +1 -0
  120. package/bridge-recipes/unreal/helix-character-creator-female/female-firefight-outfit.addon.json +1 -0
  121. package/bridge-recipes/unreal/helix-character-creator-female/female-firefight-outfit.json +1 -0
  122. package/bridge-recipes/unreal/helix-character-creator-female/female-fruity-pants.addon.json +1 -0
  123. package/bridge-recipes/unreal/helix-character-creator-female/female-fruity-pants.json +1 -0
  124. package/bridge-recipes/unreal/helix-character-creator-female/female-fruity-sneakers.addon.json +1 -0
  125. package/bridge-recipes/unreal/helix-character-creator-female/female-fruity-sneakers.json +1 -0
  126. package/bridge-recipes/unreal/helix-character-creator-female/female-fruity-top.addon.json +1 -0
  127. package/bridge-recipes/unreal/helix-character-creator-female/female-fruity-top.json +1 -0
  128. package/bridge-recipes/unreal/helix-character-creator-female/female-gamer-mask.addon.json +1 -0
  129. package/bridge-recipes/unreal/helix-character-creator-female/female-gamer-mask.json +1 -0
  130. package/bridge-recipes/unreal/helix-character-creator-female/female-guy-fawkes-mask.addon.json +1 -0
  131. package/bridge-recipes/unreal/helix-character-creator-female/female-guy-fawkes-mask.json +1 -0
  132. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a1.addon.json +1 -0
  133. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a1.json +1 -0
  134. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a10.addon.json +1 -0
  135. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a10.json +1 -0
  136. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a11.addon.json +1 -0
  137. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a11.json +1 -0
  138. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a12.addon.json +1 -0
  139. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a12.json +1 -0
  140. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a13.addon.json +1 -0
  141. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a13.json +1 -0
  142. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a14.addon.json +1 -0
  143. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a14.json +1 -0
  144. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a15.addon.json +1 -0
  145. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a15.json +1 -0
  146. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a16.addon.json +1 -0
  147. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a16.json +1 -0
  148. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a17.addon.json +1 -0
  149. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a17.json +1 -0
  150. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a18.addon.json +1 -0
  151. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a18.json +1 -0
  152. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a19.addon.json +1 -0
  153. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a19.json +1 -0
  154. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a2.addon.json +1 -0
  155. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a2.json +1 -0
  156. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a20.addon.json +1 -0
  157. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a20.json +1 -0
  158. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a21.addon.json +1 -0
  159. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a21.json +1 -0
  160. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a3.addon.json +1 -0
  161. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a3.json +1 -0
  162. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a4.addon.json +1 -0
  163. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a4.json +1 -0
  164. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a5.addon.json +1 -0
  165. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a5.json +1 -0
  166. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a6.addon.json +1 -0
  167. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a6.json +1 -0
  168. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a7.addon.json +1 -0
  169. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a7.json +1 -0
  170. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a8.addon.json +1 -0
  171. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a8.json +1 -0
  172. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a9.addon.json +1 -0
  173. package/bridge-recipes/unreal/helix-character-creator-female/female-hair-a9.json +1 -0
  174. package/bridge-recipes/unreal/helix-character-creator-female/female-high-waist-tailored-trousers.addon.json +1 -0
  175. package/bridge-recipes/unreal/helix-character-creator-female/female-high-waist-tailored-trousers.json +1 -0
  176. package/bridge-recipes/unreal/helix-character-creator-female/female-hogwarts-pants.addon.json +1 -0
  177. package/bridge-recipes/unreal/helix-character-creator-female/female-hogwarts-pants.json +1 -0
  178. package/bridge-recipes/unreal/helix-character-creator-female/female-hoody.addon.json +1 -0
  179. package/bridge-recipes/unreal/helix-character-creator-female/female-hoody.json +1 -0
  180. package/bridge-recipes/unreal/helix-character-creator-female/female-jacket-6.addon.json +1 -0
  181. package/bridge-recipes/unreal/helix-character-creator-female/female-jacket-6.json +1 -0
  182. package/bridge-recipes/unreal/helix-character-creator-female/female-joker-mask.addon.json +1 -0
  183. package/bridge-recipes/unreal/helix-character-creator-female/female-joker-mask.json +1 -0
  184. package/bridge-recipes/unreal/helix-character-creator-female/female-kombes-brown.addon.json +1 -0
  185. package/bridge-recipes/unreal/helix-character-creator-female/female-kombes-brown.json +1 -0
  186. package/bridge-recipes/unreal/helix-character-creator-female/female-kombes.addon.json +1 -0
  187. package/bridge-recipes/unreal/helix-character-creator-female/female-kombes.json +1 -0
  188. package/bridge-recipes/unreal/helix-character-creator-female/female-marshmallow-mask.addon.json +1 -0
  189. package/bridge-recipes/unreal/helix-character-creator-female/female-marshmallow-mask.json +1 -0
  190. package/bridge-recipes/unreal/helix-character-creator-female/female-maska.addon.json +1 -0
  191. package/bridge-recipes/unreal/helix-character-creator-female/female-maska.json +1 -0
  192. package/bridge-recipes/unreal/helix-character-creator-female/female-nebula-executive-pants.addon.json +1 -0
  193. package/bridge-recipes/unreal/helix-character-creator-female/female-nebula-executive-pants.json +1 -0
  194. package/bridge-recipes/unreal/helix-character-creator-female/female-nebula-executive-shoes.addon.json +1 -0
  195. package/bridge-recipes/unreal/helix-character-creator-female/female-nebula-executive-shoes.json +1 -0
  196. package/bridge-recipes/unreal/helix-character-creator-female/female-ninza-costume.addon.json +1 -0
  197. package/bridge-recipes/unreal/helix-character-creator-female/female-ninza-costume.json +1 -0
  198. package/bridge-recipes/unreal/helix-character-creator-female/female-orange-kombes.addon.json +1 -0
  199. package/bridge-recipes/unreal/helix-character-creator-female/female-orange-kombes.json +1 -0
  200. package/bridge-recipes/unreal/helix-character-creator-female/female-panama.addon.json +1 -0
  201. package/bridge-recipes/unreal/helix-character-creator-female/female-panama.json +1 -0
  202. package/bridge-recipes/unreal/helix-character-creator-female/female-panda-bag-2.addon.json +1 -0
  203. package/bridge-recipes/unreal/helix-character-creator-female/female-panda-bag-2.json +1 -0
  204. package/bridge-recipes/unreal/helix-character-creator-female/female-pantslow.addon.json +1 -0
  205. package/bridge-recipes/unreal/helix-character-creator-female/female-pantslow.json +1 -0
  206. package/bridge-recipes/unreal/helix-character-creator-female/female-paper-bag-mask.addon.json +1 -0
  207. package/bridge-recipes/unreal/helix-character-creator-female/female-paper-bag-mask.json +1 -0
  208. package/bridge-recipes/unreal/helix-character-creator-female/female-pig-mask.addon.json +1 -0
  209. package/bridge-recipes/unreal/helix-character-creator-female/female-pig-mask.json +1 -0
  210. package/bridge-recipes/unreal/helix-character-creator-female/female-police-uniform.addon.json +1 -0
  211. package/bridge-recipes/unreal/helix-character-creator-female/female-police-uniform.json +1 -0
  212. package/bridge-recipes/unreal/helix-character-creator-female/female-prison-outfit.addon.json +1 -0
  213. package/bridge-recipes/unreal/helix-character-creator-female/female-prison-outfit.json +1 -0
  214. package/bridge-recipes/unreal/helix-character-creator-female/female-short-b4low.addon.json +1 -0
  215. package/bridge-recipes/unreal/helix-character-creator-female/female-short-b4low.json +1 -0
  216. package/bridge-recipes/unreal/helix-character-creator-female/female-short-swimming.addon.json +1 -0
  217. package/bridge-recipes/unreal/helix-character-creator-female/female-short-swimming.json +1 -0
  218. package/bridge-recipes/unreal/helix-character-creator-female/female-shortlow.addon.json +1 -0
  219. package/bridge-recipes/unreal/helix-character-creator-female/female-shortlow.json +1 -0
  220. package/bridge-recipes/unreal/helix-character-creator-female/female-shorts-b3.addon.json +1 -0
  221. package/bridge-recipes/unreal/helix-character-creator-female/female-shorts-b3.json +1 -0
  222. package/bridge-recipes/unreal/helix-character-creator-female/female-sterile-gloves.addon.json +1 -0
  223. package/bridge-recipes/unreal/helix-character-creator-female/female-sterile-gloves.json +1 -0
  224. package/bridge-recipes/unreal/helix-character-creator-female/female-surgeon-mask.addon.json +1 -0
  225. package/bridge-recipes/unreal/helix-character-creator-female/female-surgeon-mask.json +1 -0
  226. package/bridge-recipes/unreal/helix-character-creator-female/female-swat.addon.json +1 -0
  227. package/bridge-recipes/unreal/helix-character-creator-female/female-swat.json +1 -0
  228. package/bridge-recipes/unreal/helix-character-creator-female/female-top.addon.json +1 -0
  229. package/bridge-recipes/unreal/helix-character-creator-female/female-top.json +1 -0
  230. package/bridge-recipes/unreal/helix-character-creator-female/female-topx1.addon.json +1 -0
  231. package/bridge-recipes/unreal/helix-character-creator-female/female-topx1.json +1 -0
  232. package/bridge-recipes/unreal/helix-character-creator-female/female-urban-ghost-hoodie.addon.json +1 -0
  233. package/bridge-recipes/unreal/helix-character-creator-female/female-urban-ghost-hoodie.json +1 -0
  234. package/bridge-recipes/unreal/helix-character-creator-female/female-urban-ghost-mask.addon.json +1 -0
  235. package/bridge-recipes/unreal/helix-character-creator-female/female-urban-ghost-mask.json +1 -0
  236. package/bridge-recipes/unreal/helix-character-creator-female/female-urban-ghost-pants.addon.json +1 -0
  237. package/bridge-recipes/unreal/helix-character-creator-female/female-urban-ghost-pants.json +1 -0
  238. package/bridge-recipes/unreal/helix-character-creator-female/female-warehouse-uniform.addon.json +1 -0
  239. package/bridge-recipes/unreal/helix-character-creator-female/female-warehouse-uniform.json +1 -0
  240. package/bridge-recipes/unreal/helix-character-creator-female/female-wide-top.addon.json +1 -0
  241. package/bridge-recipes/unreal/helix-character-creator-female/female-wide-top.json +1 -0
  242. package/bridge-recipes/unreal/helix-character-creator-female/female-wolf-set.addon.json +1 -0
  243. package/bridge-recipes/unreal/helix-character-creator-female/female-wolf-set.json +1 -0
  244. package/bridge-recipes/unreal/helix-character-creator-female/female-woman-mask-3.addon.json +1 -0
  245. package/bridge-recipes/unreal/helix-character-creator-female/female-woman-mask-3.json +1 -0
  246. package/bridge-recipes/unreal/helix-character-creator-female/female-women-out-2.addon.json +1 -0
  247. package/bridge-recipes/unreal/helix-character-creator-female/female-women-out-2.json +1 -0
  248. package/bridge-recipes/unreal/helix-character-creator-female/footwear.addon.json +1 -0
  249. package/bridge-recipes/unreal/helix-character-creator-female/footwear.json +1 -0
  250. package/bridge-recipes/unreal/helix-character-creator-female/gloves.addon.json +1 -0
  251. package/bridge-recipes/unreal/helix-character-creator-female/gloves.json +1 -0
  252. package/bridge-recipes/unreal/helix-character-creator-female/hair.addon.json +1 -0
  253. package/bridge-recipes/unreal/helix-character-creator-female/hair.json +1 -0
  254. package/bridge-recipes/unreal/helix-character-creator-female/headwear.addon.json +1 -0
  255. package/bridge-recipes/unreal/helix-character-creator-female/headwear.json +1 -0
  256. package/bridge-recipes/unreal/helix-character-creator-female/mask.addon.json +1 -0
  257. package/bridge-recipes/unreal/helix-character-creator-female/mask.json +1 -0
  258. package/bridge-recipes/unreal/helix-character-creator-female/neck.addon.json +1 -0
  259. package/bridge-recipes/unreal/helix-character-creator-female/neck.json +1 -0
  260. package/bridge-recipes/unreal/helix-character-creator-female/outfit.addon.json +1 -0
  261. package/bridge-recipes/unreal/helix-character-creator-female/outfit.json +1 -0
  262. package/bridge-recipes/unreal/helix-character-creator-female/top.addon.json +1 -0
  263. package/bridge-recipes/unreal/helix-character-creator-female/top.json +1 -0
  264. package/bridge-recipes/unreal/helix-character-creator-male/README.md +15 -0
  265. package/bridge-recipes/unreal/helix-character-creator-male/all.json +18 -0
  266. package/bridge-recipes/unreal/helix-character-creator-male/back.addon.json +1 -0
  267. package/bridge-recipes/unreal/helix-character-creator-male/back.json +1 -0
  268. package/bridge-recipes/unreal/helix-character-creator-male/base-male-face.json +6 -0
  269. package/bridge-recipes/unreal/helix-character-creator-male/base-male.json +6 -0
  270. package/bridge-recipes/unreal/helix-character-creator-male/bottom.addon.json +1 -0
  271. package/bridge-recipes/unreal/helix-character-creator-male/bottom.json +1 -0
  272. package/bridge-recipes/unreal/helix-character-creator-male/eyewear.addon.json +1 -0
  273. package/bridge-recipes/unreal/helix-character-creator-male/eyewear.json +1 -0
  274. package/bridge-recipes/unreal/helix-character-creator-male/footwear.addon.json +1 -0
  275. package/bridge-recipes/unreal/helix-character-creator-male/footwear.json +1 -0
  276. package/bridge-recipes/unreal/helix-character-creator-male/gloves.addon.json +1 -0
  277. package/bridge-recipes/unreal/helix-character-creator-male/gloves.json +1 -0
  278. package/bridge-recipes/unreal/helix-character-creator-male/hair.addon.json +1 -0
  279. package/bridge-recipes/unreal/helix-character-creator-male/hair.json +1 -0
  280. package/bridge-recipes/unreal/helix-character-creator-male/headwear.addon.json +1 -0
  281. package/bridge-recipes/unreal/helix-character-creator-male/headwear.json +1 -0
  282. package/bridge-recipes/unreal/helix-character-creator-male/male-batch-hair.json +23 -0
  283. package/bridge-recipes/unreal/helix-character-creator-male/male-batch-nebula-urbanghost.json +7 -0
  284. package/bridge-recipes/unreal/helix-character-creator-male/male-batch-uniforms.json +10 -0
  285. package/bridge-recipes/unreal/helix-character-creator-male/male-batch6-slot2.json +7 -0
  286. package/bridge-recipes/unreal/helix-character-creator-male/male-batch7-slot3.json +6 -0
  287. package/bridge-recipes/unreal/helix-character-creator-male/male-batch8-combined.json +11 -0
  288. package/bridge-recipes/unreal/helix-character-creator-male/male-boots-25.addon.json +1 -0
  289. package/bridge-recipes/unreal/helix-character-creator-male/male-cargo-pants.addon.json +1 -0
  290. package/bridge-recipes/unreal/helix-character-creator-male/male-cargo-pants.json +1 -0
  291. package/bridge-recipes/unreal/helix-character-creator-male/male-carnival-mask-2.addon.json +1 -0
  292. package/bridge-recipes/unreal/helix-character-creator-male/male-carnival-mask-2.json +1 -0
  293. package/bridge-recipes/unreal/helix-character-creator-male/male-carnival-mask-3.addon.json +1 -0
  294. package/bridge-recipes/unreal/helix-character-creator-male/male-carnival-mask-3.json +1 -0
  295. package/bridge-recipes/unreal/helix-character-creator-male/male-clare-pants.addon.json +1 -0
  296. package/bridge-recipes/unreal/helix-character-creator-male/male-clare-pants.json +1 -0
  297. package/bridge-recipes/unreal/helix-character-creator-male/male-clare-shoes.addon.json +1 -0
  298. package/bridge-recipes/unreal/helix-character-creator-male/male-clare-shoes.json +1 -0
  299. package/bridge-recipes/unreal/helix-character-creator-male/male-clare-top.addon.json +1 -0
  300. package/bridge-recipes/unreal/helix-character-creator-male/male-clare-top.json +1 -0
  301. package/bridge-recipes/unreal/helix-character-creator-male/male-diamond-hands.addon.json +1 -0
  302. package/bridge-recipes/unreal/helix-character-creator-male/male-diamond-hands.json +1 -0
  303. package/bridge-recipes/unreal/helix-character-creator-male/male-doctor-outfit.addon.json +1 -0
  304. package/bridge-recipes/unreal/helix-character-creator-male/male-doctor-outfit.json +1 -0
  305. package/bridge-recipes/unreal/helix-character-creator-male/male-eye-hole-mask-2.addon.json +1 -0
  306. package/bridge-recipes/unreal/helix-character-creator-male/male-eye-hole-mask-2.json +1 -0
  307. package/bridge-recipes/unreal/helix-character-creator-male/male-eye-hole-mask.addon.json +1 -0
  308. package/bridge-recipes/unreal/helix-character-creator-male/male-eye-hole-mask.json +1 -0
  309. package/bridge-recipes/unreal/helix-character-creator-male/male-eye-patch.addon.json +1 -0
  310. package/bridge-recipes/unreal/helix-character-creator-male/male-eye-patch.json +1 -0
  311. package/bridge-recipes/unreal/helix-character-creator-male/male-fb-cargo-pants-2.addon.json +1 -0
  312. package/bridge-recipes/unreal/helix-character-creator-male/male-fb-cargo-pants-2.json +1 -0
  313. package/bridge-recipes/unreal/helix-character-creator-male/male-fb-cargo-pants.addon.json +1 -0
  314. package/bridge-recipes/unreal/helix-character-creator-male/male-fb-puffy.addon.json +1 -0
  315. package/bridge-recipes/unreal/helix-character-creator-male/male-fb-puffy.json +1 -0
  316. package/bridge-recipes/unreal/helix-character-creator-male/male-firefight-outfit.addon.json +1 -0
  317. package/bridge-recipes/unreal/helix-character-creator-male/male-firefight-outfit.json +1 -0
  318. package/bridge-recipes/unreal/helix-character-creator-male/male-gamer-mask-2.addon.json +1 -0
  319. package/bridge-recipes/unreal/helix-character-creator-male/male-gamer-mask-2.json +1 -0
  320. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a1.addon.json +1 -0
  321. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a1.json +1 -0
  322. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a10.addon.json +1 -0
  323. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a10.json +1 -0
  324. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a11.addon.json +1 -0
  325. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a11.json +1 -0
  326. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a12.addon.json +1 -0
  327. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a12.json +1 -0
  328. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a13.addon.json +1 -0
  329. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a13.json +1 -0
  330. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a14.addon.json +1 -0
  331. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a14.json +1 -0
  332. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a15.addon.json +1 -0
  333. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a15.json +1 -0
  334. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a16.addon.json +1 -0
  335. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a16.json +1 -0
  336. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a17.addon.json +1 -0
  337. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a17.json +1 -0
  338. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a18.addon.json +1 -0
  339. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a18.json +1 -0
  340. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a19.addon.json +1 -0
  341. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a19.json +1 -0
  342. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a2.addon.json +1 -0
  343. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a2.json +1 -0
  344. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a20.addon.json +1 -0
  345. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a20.json +1 -0
  346. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a21.addon.json +1 -0
  347. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a21.json +1 -0
  348. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a3.addon.json +1 -0
  349. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a3.json +1 -0
  350. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a4.addon.json +1 -0
  351. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a4.json +1 -0
  352. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a5.addon.json +1 -0
  353. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a5.json +1 -0
  354. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a6.addon.json +1 -0
  355. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a6.json +1 -0
  356. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a7.addon.json +1 -0
  357. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a7.json +1 -0
  358. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a8.addon.json +1 -0
  359. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a8.json +1 -0
  360. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a9.addon.json +1 -0
  361. package/bridge-recipes/unreal/helix-character-creator-male/male-hair-a9.json +1 -0
  362. package/bridge-recipes/unreal/helix-character-creator-male/male-kombes-brown-v2.addon.json +1 -0
  363. package/bridge-recipes/unreal/helix-character-creator-male/male-kombes-brown-v2.json +1 -0
  364. package/bridge-recipes/unreal/helix-character-creator-male/male-kombes-brown.addon.json +1 -0
  365. package/bridge-recipes/unreal/helix-character-creator-male/male-man-mask-3.addon.json +1 -0
  366. package/bridge-recipes/unreal/helix-character-creator-male/male-marshmallow-mask.addon.json +1 -0
  367. package/bridge-recipes/unreal/helix-character-creator-male/male-marshmallow-mask.json +1 -0
  368. package/bridge-recipes/unreal/helix-character-creator-male/male-mikejack-jacket.addon.json +1 -0
  369. package/bridge-recipes/unreal/helix-character-creator-male/male-nebula-executive-coat.addon.json +1 -0
  370. package/bridge-recipes/unreal/helix-character-creator-male/male-nebula-executive-coat.json +1 -0
  371. package/bridge-recipes/unreal/helix-character-creator-male/male-nebula-executive-pants.addon.json +1 -0
  372. package/bridge-recipes/unreal/helix-character-creator-male/male-nebula-executive-pants.json +1 -0
  373. package/bridge-recipes/unreal/helix-character-creator-male/male-nebula-executive-shoes.addon.json +1 -0
  374. package/bridge-recipes/unreal/helix-character-creator-male/male-nebula-executive-shoes.json +1 -0
  375. package/bridge-recipes/unreal/helix-character-creator-male/male-neo-arcane-heir-gloves.addon.json +1 -0
  376. package/bridge-recipes/unreal/helix-character-creator-male/male-neo-arcane-heir-gloves.json +1 -0
  377. package/bridge-recipes/unreal/helix-character-creator-male/male-neo-arcane-heir-mantle.addon.json +1 -0
  378. package/bridge-recipes/unreal/helix-character-creator-male/male-neo-arcane-heir-mantle.json +1 -0
  379. package/bridge-recipes/unreal/helix-character-creator-male/male-neo-arcane-heir-tunic.addon.json +1 -0
  380. package/bridge-recipes/unreal/helix-character-creator-male/male-neo-arcane-heir-tunic.json +1 -0
  381. package/bridge-recipes/unreal/helix-character-creator-male/male-orangekombes.addon.json +1 -0
  382. package/bridge-recipes/unreal/helix-character-creator-male/male-orangekombes.json +1 -0
  383. package/bridge-recipes/unreal/helix-character-creator-male/male-out2-boots.addon.json +1 -0
  384. package/bridge-recipes/unreal/helix-character-creator-male/male-out2-boots.json +1 -0
  385. package/bridge-recipes/unreal/helix-character-creator-male/male-panda-bag-2.addon.json +1 -0
  386. package/bridge-recipes/unreal/helix-character-creator-male/male-panda-bag-2.json +1 -0
  387. package/bridge-recipes/unreal/helix-character-creator-male/male-pants-2.addon.json +1 -0
  388. package/bridge-recipes/unreal/helix-character-creator-male/male-pants-2.json +1 -0
  389. package/bridge-recipes/unreal/helix-character-creator-male/male-paper-bag-mask.addon.json +1 -0
  390. package/bridge-recipes/unreal/helix-character-creator-male/male-paper-bag-mask.json +1 -0
  391. package/bridge-recipes/unreal/helix-character-creator-male/male-pig-mask.addon.json +1 -0
  392. package/bridge-recipes/unreal/helix-character-creator-male/male-pig-mask.json +1 -0
  393. package/bridge-recipes/unreal/helix-character-creator-male/male-police-uniform.addon.json +1 -0
  394. package/bridge-recipes/unreal/helix-character-creator-male/male-police-uniform.json +1 -0
  395. package/bridge-recipes/unreal/helix-character-creator-male/male-prison-outfit.addon.json +1 -0
  396. package/bridge-recipes/unreal/helix-character-creator-male/male-prison-outfit.json +1 -0
  397. package/bridge-recipes/unreal/helix-character-creator-male/male-puffer-jacket.addon.json +1 -0
  398. package/bridge-recipes/unreal/helix-character-creator-male/male-puffer-jacket.json +1 -0
  399. package/bridge-recipes/unreal/helix-character-creator-male/male-pullover-hoodie.addon.json +1 -0
  400. package/bridge-recipes/unreal/helix-character-creator-male/male-pullover-hoodie.json +1 -0
  401. package/bridge-recipes/unreal/helix-character-creator-male/male-robber-mask.addon.json +1 -0
  402. package/bridge-recipes/unreal/helix-character-creator-male/male-robber-mask.json +1 -0
  403. package/bridge-recipes/unreal/helix-character-creator-male/male-short-swimming.addon.json +1 -0
  404. package/bridge-recipes/unreal/helix-character-creator-male/male-short-swimming.json +1 -0
  405. package/bridge-recipes/unreal/helix-character-creator-male/male-sinth-ascetic-jacket.addon.json +1 -0
  406. package/bridge-recipes/unreal/helix-character-creator-male/male-sinth-ascetic-jacket.json +1 -0
  407. package/bridge-recipes/unreal/helix-character-creator-male/male-sip-cap.addon.json +1 -0
  408. package/bridge-recipes/unreal/helix-character-creator-male/male-sip-cap.json +1 -0
  409. package/bridge-recipes/unreal/helix-character-creator-male/male-socks.addon.json +1 -0
  410. package/bridge-recipes/unreal/helix-character-creator-male/male-socks.json +1 -0
  411. package/bridge-recipes/unreal/helix-character-creator-male/male-surgeon-mask.addon.json +1 -0
  412. package/bridge-recipes/unreal/helix-character-creator-male/male-surgeon-mask.json +1 -0
  413. package/bridge-recipes/unreal/helix-character-creator-male/male-tech-hoodie.addon.json +1 -0
  414. package/bridge-recipes/unreal/helix-character-creator-male/male-tech-hoodie.json +1 -0
  415. package/bridge-recipes/unreal/helix-character-creator-male/male-urban-ghost-hoodie.addon.json +1 -0
  416. package/bridge-recipes/unreal/helix-character-creator-male/male-urban-ghost-hoodie.json +1 -0
  417. package/bridge-recipes/unreal/helix-character-creator-male/male-urban-ghost-mask.addon.json +1 -0
  418. package/bridge-recipes/unreal/helix-character-creator-male/male-urban-ghost-mask.json +1 -0
  419. package/bridge-recipes/unreal/helix-character-creator-male/male-urban-ghost-pants.addon.json +1 -0
  420. package/bridge-recipes/unreal/helix-character-creator-male/male-urban-ghost-pants.json +1 -0
  421. package/bridge-recipes/unreal/helix-character-creator-male/male-warehouse-uniform.addon.json +1 -0
  422. package/bridge-recipes/unreal/helix-character-creator-male/male-warehouse-uniform.json +1 -0
  423. package/bridge-recipes/unreal/helix-character-creator-male/mask.addon.json +1 -0
  424. package/bridge-recipes/unreal/helix-character-creator-male/mask.json +1 -0
  425. package/bridge-recipes/unreal/helix-character-creator-male/neck.addon.json +1 -0
  426. package/bridge-recipes/unreal/helix-character-creator-male/neck.json +1 -0
  427. package/bridge-recipes/unreal/helix-character-creator-male/outfit.addon.json +1 -0
  428. package/bridge-recipes/unreal/helix-character-creator-male/outfit.json +1 -0
  429. package/bridge-recipes/unreal/helix-character-creator-male/palette-pilot.json +1 -0
  430. package/bridge-recipes/unreal/helix-character-creator-male/test/recipes.test.js +122 -0
  431. package/bridge-recipes/unreal/helix-character-creator-male/top.addon.json +1 -0
  432. package/bridge-recipes/unreal/helix-character-creator-male/top.json +1 -0
  433. package/bridge-recipes/unreal/helix-character-creator-male/variants/bottom-nopalette.addon.json +1 -0
  434. package/bridge-recipes/unreal/helix-character-creator-male/variants/headwear-nopalette.addon.json +1 -0
  435. package/bridge-recipes/unreal/helix-character-creator-male/variants/neck-nopalette.addon.json +1 -0
  436. package/dist/ability.d.ts +2 -2
  437. package/dist/ability.js +6 -5
  438. package/dist/ability.js.map +1 -1
  439. package/dist/achievement.d.ts +123 -0
  440. package/dist/achievement.js +400 -0
  441. package/dist/achievement.js.map +1 -0
  442. package/dist/api.d.ts +19 -1
  443. package/dist/api.js +80 -6
  444. package/dist/api.js.map +1 -1
  445. package/dist/assets.d.ts +595 -0
  446. package/dist/assets.js +1121 -0
  447. package/dist/assets.js.map +1 -0
  448. package/dist/audioCommand.d.ts +65 -0
  449. package/dist/audioCommand.js +181 -0
  450. package/dist/audioCommand.js.map +1 -0
  451. package/dist/bakeBodyRegionsCli.d.ts +19 -0
  452. package/dist/bakeBodyRegionsCli.js +25 -0
  453. package/dist/bakeBodyRegionsCli.js.map +1 -0
  454. package/dist/bakeLighting.d.ts +173 -0
  455. package/dist/bakeLighting.js +452 -0
  456. package/dist/bakeLighting.js.map +1 -0
  457. package/dist/bridge/bridge.testutil.d.ts +105 -0
  458. package/dist/bridge/bridge.testutil.js +259 -0
  459. package/dist/bridge/bridge.testutil.js.map +1 -0
  460. package/dist/bridge/characterAddon.d.ts +47 -0
  461. package/dist/bridge/characterAddon.js +146 -0
  462. package/dist/bridge/characterAddon.js.map +1 -0
  463. package/dist/bridge/detect.d.ts +4 -0
  464. package/dist/bridge/detect.js +154 -0
  465. package/dist/bridge/detect.js.map +1 -0
  466. package/dist/bridge/execute.d.ts +3 -0
  467. package/dist/bridge/execute.js +206 -0
  468. package/dist/bridge/execute.js.map +1 -0
  469. package/dist/bridge/glb.d.ts +60 -0
  470. package/dist/bridge/glb.js +81 -0
  471. package/dist/bridge/glb.js.map +1 -0
  472. package/dist/bridge/hash.d.ts +6 -0
  473. package/dist/bridge/hash.js +40 -0
  474. package/dist/bridge/hash.js.map +1 -0
  475. package/dist/bridge/index.d.ts +11 -0
  476. package/dist/bridge/index.js +28 -0
  477. package/dist/bridge/index.js.map +1 -0
  478. package/dist/bridge/internal/artifacts.d.ts +5 -0
  479. package/dist/bridge/internal/artifacts.js +31 -0
  480. package/dist/bridge/internal/artifacts.js.map +1 -0
  481. package/dist/bridge/internal/builtInExecution.d.ts +4 -0
  482. package/dist/bridge/internal/builtInExecution.js +514 -0
  483. package/dist/bridge/internal/builtInExecution.js.map +1 -0
  484. package/dist/bridge/internal/externalExecution.d.ts +12 -0
  485. package/dist/bridge/internal/externalExecution.js +261 -0
  486. package/dist/bridge/internal/externalExecution.js.map +1 -0
  487. package/dist/bridge/internal/outputReservation.d.ts +13 -0
  488. package/dist/bridge/internal/outputReservation.js +151 -0
  489. package/dist/bridge/internal/outputReservation.js.map +1 -0
  490. package/dist/bridge/internal/snapshots.d.ts +32 -0
  491. package/dist/bridge/internal/snapshots.js +562 -0
  492. package/dist/bridge/internal/snapshots.js.map +1 -0
  493. package/dist/bridge/management.d.ts +40 -0
  494. package/dist/bridge/management.js +333 -0
  495. package/dist/bridge/management.js.map +1 -0
  496. package/dist/bridge/manifest.d.ts +8 -0
  497. package/dist/bridge/manifest.js +192 -0
  498. package/dist/bridge/manifest.js.map +1 -0
  499. package/dist/bridge/metahuman.d.ts +26 -0
  500. package/dist/bridge/metahuman.js +332 -0
  501. package/dist/bridge/metahuman.js.map +1 -0
  502. package/dist/bridge/planner.d.ts +9 -0
  503. package/dist/bridge/planner.js +246 -0
  504. package/dist/bridge/planner.js.map +1 -0
  505. package/dist/bridge/plugins.d.ts +17 -0
  506. package/dist/bridge/plugins.js +307 -0
  507. package/dist/bridge/plugins.js.map +1 -0
  508. package/dist/bridge/resolution.d.ts +8 -0
  509. package/dist/bridge/resolution.js +55 -0
  510. package/dist/bridge/resolution.js.map +1 -0
  511. package/dist/bridge/types.d.ts +247 -0
  512. package/dist/bridge/types.js +60 -0
  513. package/dist/bridge/types.js.map +1 -0
  514. package/dist/bridge/validate.d.ts +12 -0
  515. package/dist/bridge/validate.js +370 -0
  516. package/dist/bridge/validate.js.map +1 -0
  517. package/dist/bridge/zipSource.d.ts +27 -0
  518. package/dist/bridge/zipSource.js +90 -0
  519. package/dist/bridge/zipSource.js.map +1 -0
  520. package/dist/browser/hostSlots.d.ts +57 -0
  521. package/dist/browser/hostSlots.js +371 -0
  522. package/dist/browser/hostSlots.js.map +1 -0
  523. package/dist/browser/launch.d.ts +25 -0
  524. package/dist/browser/launch.js +74 -0
  525. package/dist/browser/launch.js.map +1 -0
  526. package/dist/browser/nonSystemChrome.d.ts +15 -0
  527. package/dist/browser/nonSystemChrome.js +91 -0
  528. package/dist/browser/nonSystemChrome.js.map +1 -0
  529. package/dist/builds/index.d.ts +54 -0
  530. package/dist/builds/index.js +215 -0
  531. package/dist/builds/index.js.map +1 -0
  532. package/dist/bundle.d.ts +35 -2
  533. package/dist/bundle.js +437 -20
  534. package/dist/bundle.js.map +1 -1
  535. package/dist/canary/cli.d.ts +17 -0
  536. package/dist/canary/cli.js +95 -0
  537. package/dist/canary/cli.js.map +1 -0
  538. package/dist/canary/index.d.ts +4 -0
  539. package/dist/canary/index.js +21 -0
  540. package/dist/canary/index.js.map +1 -0
  541. package/dist/canary/inventory.d.ts +46 -0
  542. package/dist/canary/inventory.js +499 -0
  543. package/dist/canary/inventory.js.map +1 -0
  544. package/dist/canary/pacifica.d.ts +51 -0
  545. package/dist/canary/pacifica.js +247 -0
  546. package/dist/canary/pacifica.js.map +1 -0
  547. package/dist/canary/plan.d.ts +115 -0
  548. package/dist/canary/plan.js +479 -0
  549. package/dist/canary/plan.js.map +1 -0
  550. package/dist/character/addonPushOut.d.ts +66 -0
  551. package/dist/character/addonPushOut.js +211 -0
  552. package/dist/character/addonPushOut.js.map +1 -0
  553. package/dist/character/avatarPreflight.d.ts +92 -0
  554. package/dist/character/avatarPreflight.js +261 -0
  555. package/dist/character/avatarPreflight.js.map +1 -0
  556. package/dist/character/bakeBodyRegions.d.ts +80 -0
  557. package/dist/character/bakeBodyRegions.js +190 -0
  558. package/dist/character/bakeBodyRegions.js.map +1 -0
  559. package/dist/character/baseColorGuard.d.ts +62 -0
  560. package/dist/character/baseColorGuard.js +141 -0
  561. package/dist/character/baseColorGuard.js.map +1 -0
  562. package/dist/character/bodyGeometryGuard.d.ts +243 -0
  563. package/dist/character/bodyGeometryGuard.js +417 -0
  564. package/dist/character/bodyGeometryGuard.js.map +1 -0
  565. package/dist/character/bodyRegionHide.d.ts +57 -0
  566. package/dist/character/bodyRegionHide.js +97 -0
  567. package/dist/character/bodyRegionHide.js.map +1 -0
  568. package/dist/character/composeBaseMale.d.ts +25 -0
  569. package/dist/character/composeBaseMale.js +712 -0
  570. package/dist/character/composeBaseMale.js.map +1 -0
  571. package/dist/character/esm.js +3 -1
  572. package/dist/character/esm.js.map +1 -1
  573. package/dist/character/faceManifest.d.ts +53 -0
  574. package/dist/character/faceManifest.js +256 -0
  575. package/dist/character/faceManifest.js.map +1 -0
  576. package/dist/character/fbx.d.ts +61 -0
  577. package/dist/character/fbx.js +360 -0
  578. package/dist/character/fbx.js.map +1 -0
  579. package/dist/character/fitGarmentFile.d.ts +39 -0
  580. package/dist/character/fitGarmentFile.js +53 -0
  581. package/dist/character/fitGarmentFile.js.map +1 -0
  582. package/dist/character/helixPalette.d.ts +68 -0
  583. package/dist/character/helixPalette.js +183 -0
  584. package/dist/character/helixPalette.js.map +1 -0
  585. package/dist/character/hideCoverage.d.ts +135 -0
  586. package/dist/character/hideCoverage.js +450 -0
  587. package/dist/character/hideCoverage.js.map +1 -0
  588. package/dist/character/imageLimits.d.ts +3 -0
  589. package/dist/character/imageLimits.js +7 -0
  590. package/dist/character/imageLimits.js.map +1 -0
  591. package/dist/character/importCharacter.d.ts +188 -10
  592. package/dist/character/importCharacter.js +853 -76
  593. package/dist/character/importCharacter.js.map +1 -1
  594. package/dist/character/importTrust.d.ts +11 -0
  595. package/dist/character/importTrust.js +56 -0
  596. package/dist/character/importTrust.js.map +1 -0
  597. package/dist/character/ktx2Decode.d.ts +11 -0
  598. package/dist/character/ktx2Decode.js +87 -0
  599. package/dist/character/ktx2Decode.js.map +1 -0
  600. package/dist/character/mat4.d.ts +7 -0
  601. package/dist/character/mat4.js +25 -2
  602. package/dist/character/mat4.js.map +1 -1
  603. package/dist/character/meshyToHelixMap.d.ts +10 -0
  604. package/dist/character/meshyToHelixMap.js +92 -3
  605. package/dist/character/meshyToHelixMap.js.map +1 -1
  606. package/dist/character/metahumanToHelixMap.d.ts +2 -0
  607. package/dist/character/metahumanToHelixMap.js +34 -0
  608. package/dist/character/metahumanToHelixMap.js.map +1 -0
  609. package/dist/character/normalMapGuard.d.ts +59 -0
  610. package/dist/character/normalMapGuard.js +139 -0
  611. package/dist/character/normalMapGuard.js.map +1 -0
  612. package/dist/character/quat.js +2 -2
  613. package/dist/character/quat.js.map +1 -1
  614. package/dist/character/reframeSkeletonFile.d.ts +19 -0
  615. package/dist/character/reframeSkeletonFile.js +45 -0
  616. package/dist/character/reframeSkeletonFile.js.map +1 -0
  617. package/dist/character/repairLodSkeletonsFile.d.ts +25 -0
  618. package/dist/character/repairLodSkeletonsFile.js +49 -0
  619. package/dist/character/repairLodSkeletonsFile.js.map +1 -0
  620. package/dist/character/restFrameGuard.d.ts +52 -0
  621. package/dist/character/restFrameGuard.js +90 -0
  622. package/dist/character/restFrameGuard.js.map +1 -0
  623. package/dist/character/slotBudgets.d.ts +37 -0
  624. package/dist/character/slotBudgets.generated.d.ts +15 -0
  625. package/dist/character/slotBudgets.generated.js +110 -0
  626. package/dist/character/slotBudgets.generated.js.map +1 -0
  627. package/dist/character/slotBudgets.js +45 -0
  628. package/dist/character/slotBudgets.js.map +1 -0
  629. package/dist/character/stages/atlasMaterials.d.ts +53 -0
  630. package/dist/character/stages/atlasMaterials.js +246 -0
  631. package/dist/character/stages/atlasMaterials.js.map +1 -0
  632. package/dist/character/stages/bakeTexture.d.ts +28 -7
  633. package/dist/character/stages/bakeTexture.js +586 -108
  634. package/dist/character/stages/bakeTexture.js.map +1 -1
  635. package/dist/character/stages/conform.d.ts +54 -9
  636. package/dist/character/stages/conform.js +686 -113
  637. package/dist/character/stages/conform.js.map +1 -1
  638. package/dist/character/stages/earClearance.d.ts +105 -0
  639. package/dist/character/stages/earClearance.js +480 -0
  640. package/dist/character/stages/earClearance.js.map +1 -0
  641. package/dist/character/stages/faceRegion.d.ts +55 -0
  642. package/dist/character/stages/faceRegion.js +183 -0
  643. package/dist/character/stages/faceRegion.js.map +1 -0
  644. package/dist/character/stages/firstPersonHide.d.ts +42 -0
  645. package/dist/character/stages/firstPersonHide.js +140 -0
  646. package/dist/character/stages/firstPersonHide.js.map +1 -0
  647. package/dist/character/stages/joinPerMesh.d.ts +18 -0
  648. package/dist/character/stages/joinPerMesh.js +46 -0
  649. package/dist/character/stages/joinPerMesh.js.map +1 -0
  650. package/dist/character/stages/ktx2.d.ts +6 -4
  651. package/dist/character/stages/ktx2.js +81 -29
  652. package/dist/character/stages/ktx2.js.map +1 -1
  653. package/dist/character/stages/limbBridge.d.ts +114 -0
  654. package/dist/character/stages/limbBridge.js +1286 -0
  655. package/dist/character/stages/limbBridge.js.map +1 -0
  656. package/dist/character/stages/mergeLods.d.ts +19 -0
  657. package/dist/character/stages/mergeLods.js +58 -2
  658. package/dist/character/stages/mergeLods.js.map +1 -1
  659. package/dist/character/stages/poseAwareFit.d.ts +192 -0
  660. package/dist/character/stages/poseAwareFit.js +417 -0
  661. package/dist/character/stages/poseAwareFit.js.map +1 -0
  662. package/dist/character/stages/poseFit/math.d.ts +141 -0
  663. package/dist/character/stages/poseFit/math.js +514 -0
  664. package/dist/character/stages/poseFit/math.js.map +1 -0
  665. package/dist/character/stages/poseFit/measure.d.ts +88 -0
  666. package/dist/character/stages/poseFit/measure.js +148 -0
  667. package/dist/character/stages/poseFit/measure.js.map +1 -0
  668. package/dist/character/stages/poseFit/model.d.ts +46 -0
  669. package/dist/character/stages/poseFit/model.js +147 -0
  670. package/dist/character/stages/poseFit/model.js.map +1 -0
  671. package/dist/character/stages/poseFit/offsetField.d.ts +76 -0
  672. package/dist/character/stages/poseFit/offsetField.js +249 -0
  673. package/dist/character/stages/poseFit/offsetField.js.map +1 -0
  674. package/dist/character/stages/poseFit/posing.d.ts +52 -0
  675. package/dist/character/stages/poseFit/posing.js +330 -0
  676. package/dist/character/stages/poseFit/posing.js.map +1 -0
  677. package/dist/character/stages/poseFit/testRig.d.ts +31 -0
  678. package/dist/character/stages/poseFit/testRig.js +85 -0
  679. package/dist/character/stages/poseFit/testRig.js.map +1 -0
  680. package/dist/character/stages/reframeSkeletonToHost.d.ts +35 -0
  681. package/dist/character/stages/reframeSkeletonToHost.js +111 -0
  682. package/dist/character/stages/reframeSkeletonToHost.js.map +1 -0
  683. package/dist/character/stages/report.js +0 -2
  684. package/dist/character/stages/report.js.map +1 -1
  685. package/dist/character/stages/resizeTextures.js +4 -4
  686. package/dist/character/stages/resizeTextures.js.map +1 -1
  687. package/dist/character/stages/retarget.d.ts +8 -2
  688. package/dist/character/stages/retarget.js +52 -4
  689. package/dist/character/stages/retarget.js.map +1 -1
  690. package/dist/character/stages/retargetClip.d.ts +6 -2
  691. package/dist/character/stages/retargetClip.js +53 -16
  692. package/dist/character/stages/retargetClip.js.map +1 -1
  693. package/dist/character/stages/sanitizeMaterials.d.ts +39 -0
  694. package/dist/character/stages/sanitizeMaterials.js +136 -0
  695. package/dist/character/stages/sanitizeMaterials.js.map +1 -0
  696. package/dist/character/stages/simplifyMesh.js +6 -3
  697. package/dist/character/stages/simplifyMesh.js.map +1 -1
  698. package/dist/character/stages/splitFacePrimitive.js +0 -2
  699. package/dist/character/stages/splitFacePrimitive.js.map +1 -1
  700. package/dist/character/stages/splitSharedLodSkeletons.d.ts +31 -0
  701. package/dist/character/stages/splitSharedLodSkeletons.js +104 -0
  702. package/dist/character/stages/splitSharedLodSkeletons.js.map +1 -0
  703. package/dist/character/stages/unifyMaterial.d.ts +66 -0
  704. package/dist/character/stages/unifyMaterial.js +136 -0
  705. package/dist/character/stages/unifyMaterial.js.map +1 -0
  706. package/dist/character/stages/vrmDynamics.d.ts +144 -0
  707. package/dist/character/stages/vrmDynamics.js +421 -0
  708. package/dist/character/stages/vrmDynamics.js.map +1 -0
  709. package/dist/character/stages/vrmFace.d.ts +82 -0
  710. package/dist/character/stages/vrmFace.js +280 -0
  711. package/dist/character/stages/vrmFace.js.map +1 -0
  712. package/dist/character/stages/weldedSimplify.d.ts +15 -1
  713. package/dist/character/stages/weldedSimplify.js +90 -9
  714. package/dist/character/stages/weldedSimplify.js.map +1 -1
  715. package/dist/character/testutil/meshyBridgeFixture.d.ts +33 -0
  716. package/dist/character/testutil/meshyBridgeFixture.js +219 -0
  717. package/dist/character/testutil/meshyBridgeFixture.js.map +1 -0
  718. package/dist/character/testutil/meshyHead.d.ts +19 -0
  719. package/dist/character/testutil/meshyHead.js +99 -0
  720. package/dist/character/testutil/meshyHead.js.map +1 -0
  721. package/dist/character/testutil/meshyRig.d.ts +17 -0
  722. package/dist/character/testutil/meshyRig.js +117 -0
  723. package/dist/character/testutil/meshyRig.js.map +1 -0
  724. package/dist/character/testutil/slotBudgetExpectations.d.ts +11 -0
  725. package/dist/character/testutil/slotBudgetExpectations.js +21 -0
  726. package/dist/character/testutil/slotBudgetExpectations.js.map +1 -0
  727. package/dist/character/testutil/syntheticRig.d.ts +12 -1
  728. package/dist/character/testutil/syntheticRig.js +88 -3
  729. package/dist/character/testutil/syntheticRig.js.map +1 -1
  730. package/dist/character/unrealMaterialSidecar.d.ts +94 -0
  731. package/dist/character/unrealMaterialSidecar.js +879 -0
  732. package/dist/character/unrealMaterialSidecar.js.map +1 -0
  733. package/dist/character/untrustedSource.d.ts +54 -0
  734. package/dist/character/untrustedSource.js +181 -0
  735. package/dist/character/untrustedSource.js.map +1 -0
  736. package/dist/character/vrmCharacter.d.ts +156 -0
  737. package/dist/character/vrmCharacter.js +678 -0
  738. package/dist/character/vrmCharacter.js.map +1 -0
  739. package/dist/config.d.ts +5 -0
  740. package/dist/config.js +66 -22
  741. package/dist/config.js.map +1 -1
  742. package/dist/continuum/adminPackagePinCommand.d.ts +14 -0
  743. package/dist/continuum/adminPackagePinCommand.js +46 -0
  744. package/dist/continuum/adminPackagePinCommand.js.map +1 -0
  745. package/dist/continuum/adminPackagePublishCommand.d.ts +13 -0
  746. package/dist/continuum/adminPackagePublishCommand.js +22 -0
  747. package/dist/continuum/adminPackagePublishCommand.js.map +1 -0
  748. package/dist/continuum/authoring.d.ts +52 -0
  749. package/dist/continuum/authoring.js +143 -0
  750. package/dist/continuum/authoring.js.map +1 -0
  751. package/dist/continuum/characterMigrationGenerator.d.ts +17 -0
  752. package/dist/continuum/characterMigrationGenerator.js +242 -0
  753. package/dist/continuum/characterMigrationGenerator.js.map +1 -0
  754. package/dist/continuum/cli.d.ts +69 -0
  755. package/dist/continuum/cli.js +145 -0
  756. package/dist/continuum/cli.js.map +1 -0
  757. package/dist/continuum/cliAuthority.d.ts +17 -0
  758. package/dist/continuum/cliAuthority.js +28 -0
  759. package/dist/continuum/cliAuthority.js.map +1 -0
  760. package/dist/continuum/client.d.ts +103 -0
  761. package/dist/continuum/client.js +190 -0
  762. package/dist/continuum/client.js.map +1 -0
  763. package/dist/continuum/homeScenePackage.d.ts +159 -0
  764. package/dist/continuum/homeScenePackage.js +267 -0
  765. package/dist/continuum/homeScenePackage.js.map +1 -0
  766. package/dist/continuum/homeScenePackageCommand.d.ts +44 -0
  767. package/dist/continuum/homeScenePackageCommand.js +107 -0
  768. package/dist/continuum/homeScenePackageCommand.js.map +1 -0
  769. package/dist/continuum/identity.d.ts +4 -0
  770. package/dist/continuum/identity.js +20 -0
  771. package/dist/continuum/identity.js.map +1 -0
  772. package/dist/continuum/index.d.ts +11 -0
  773. package/dist/continuum/index.js +28 -0
  774. package/dist/continuum/index.js.map +1 -0
  775. package/dist/continuum/missingNormals.d.ts +48 -0
  776. package/dist/continuum/missingNormals.js +99 -0
  777. package/dist/continuum/missingNormals.js.map +1 -0
  778. package/dist/continuum/objectUpload.d.ts +64 -0
  779. package/dist/continuum/objectUpload.js +375 -0
  780. package/dist/continuum/objectUpload.js.map +1 -0
  781. package/dist/continuum/pull.d.ts +22 -0
  782. package/dist/continuum/pull.js +47 -0
  783. package/dist/continuum/pull.js.map +1 -0
  784. package/dist/continuum/sourceBundle.d.ts +18 -0
  785. package/dist/continuum/sourceBundle.js +160 -0
  786. package/dist/continuum/sourceBundle.js.map +1 -0
  787. package/dist/continuum/state.d.ts +41 -0
  788. package/dist/continuum/state.js +198 -0
  789. package/dist/continuum/state.js.map +1 -0
  790. package/dist/continuum/types.d.ts +156 -0
  791. package/dist/continuum/types.js +6 -0
  792. package/dist/continuum/types.js.map +1 -0
  793. package/dist/continuum/workflow.d.ts +62 -0
  794. package/dist/continuum/workflow.js +592 -0
  795. package/dist/continuum/workflow.js.map +1 -0
  796. package/dist/cs2/areas.d.ts +41 -0
  797. package/dist/cs2/areas.js +82 -0
  798. package/dist/cs2/areas.js.map +1 -0
  799. package/dist/cs2/binary.d.ts +10 -0
  800. package/dist/cs2/binary.js +59 -0
  801. package/dist/cs2/binary.js.map +1 -0
  802. package/dist/cs2/cityLegacy.d.ts +29 -0
  803. package/dist/cs2/cityLegacy.js +48 -0
  804. package/dist/cs2/cityLegacy.js.map +1 -0
  805. package/dist/cs2/convert/areas.d.ts +32 -0
  806. package/dist/cs2/convert/areas.js +96 -0
  807. package/dist/cs2/convert/areas.js.map +1 -0
  808. package/dist/cs2/convert/glb.d.ts +48 -0
  809. package/dist/cs2/convert/glb.js +178 -0
  810. package/dist/cs2/convert/glb.js.map +1 -0
  811. package/dist/cs2/convert/markings.d.ts +96 -0
  812. package/dist/cs2/convert/markings.js +329 -0
  813. package/dist/cs2/convert/markings.js.map +1 -0
  814. package/dist/cs2/convert/nodeSeams.d.ts +20 -0
  815. package/dist/cs2/convert/nodeSeams.js +164 -0
  816. package/dist/cs2/convert/nodeSeams.js.map +1 -0
  817. package/dist/cs2/convert/roadBake.d.ts +112 -0
  818. package/dist/cs2/convert/roadBake.js +290 -0
  819. package/dist/cs2/convert/roadBake.js.map +1 -0
  820. package/dist/cs2/convert/roads.d.ts +110 -0
  821. package/dist/cs2/convert/roads.js +419 -0
  822. package/dist/cs2/convert/roads.js.map +1 -0
  823. package/dist/cs2/convert/terrain.d.ts +67 -0
  824. package/dist/cs2/convert/terrain.js +141 -0
  825. package/dist/cs2/convert/terrain.js.map +1 -0
  826. package/dist/cs2/convert/terrainConform.d.ts +58 -0
  827. package/dist/cs2/convert/terrainConform.js +284 -0
  828. package/dist/cs2/convert/terrainConform.js.map +1 -0
  829. package/dist/cs2/convert/treeRoadClearance.d.ts +17 -0
  830. package/dist/cs2/convert/treeRoadClearance.js +78 -0
  831. package/dist/cs2/convert/treeRoadClearance.js.map +1 -0
  832. package/dist/cs2/convert/trees.d.ts +33 -0
  833. package/dist/cs2/convert/trees.js +68 -0
  834. package/dist/cs2/convert/trees.js.map +1 -0
  835. package/dist/cs2/csm2.d.ts +58 -0
  836. package/dist/cs2/csm2.js +188 -0
  837. package/dist/cs2/csm2.js.map +1 -0
  838. package/dist/cs2/fixtures.d.ts +5 -0
  839. package/dist/cs2/fixtures.js +15 -0
  840. package/dist/cs2/fixtures.js.map +1 -0
  841. package/dist/cs2/impostors.d.ts +31 -0
  842. package/dist/cs2/impostors.js +42 -0
  843. package/dist/cs2/impostors.js.map +1 -0
  844. package/dist/cs2/index.d.ts +22 -0
  845. package/dist/cs2/index.js +191 -0
  846. package/dist/cs2/index.js.map +1 -0
  847. package/dist/cs2/inspect.d.ts +81 -0
  848. package/dist/cs2/inspect.js +181 -0
  849. package/dist/cs2/inspect.js.map +1 -0
  850. package/dist/cs2/lods.d.ts +22 -0
  851. package/dist/cs2/lods.js +136 -0
  852. package/dist/cs2/lods.js.map +1 -0
  853. package/dist/cs2/materials.d.ts +43 -0
  854. package/dist/cs2/materials.js +137 -0
  855. package/dist/cs2/materials.js.map +1 -0
  856. package/dist/cs2/placements.d.ts +57 -0
  857. package/dist/cs2/placements.js +116 -0
  858. package/dist/cs2/placements.js.map +1 -0
  859. package/dist/cs2/roadPieces.d.ts +79 -0
  860. package/dist/cs2/roadPieces.js +263 -0
  861. package/dist/cs2/roadPieces.js.map +1 -0
  862. package/dist/cs2/roads.d.ts +92 -0
  863. package/dist/cs2/roads.js +329 -0
  864. package/dist/cs2/roads.js.map +1 -0
  865. package/dist/cs2/terrain.d.ts +37 -0
  866. package/dist/cs2/terrain.js +91 -0
  867. package/dist/cs2/terrain.js.map +1 -0
  868. package/dist/cs2/types.d.ts +444 -0
  869. package/dist/cs2/types.js +22 -0
  870. package/dist/cs2/types.js.map +1 -0
  871. package/dist/cs2/water.d.ts +26 -0
  872. package/dist/cs2/water.js +58 -0
  873. package/dist/cs2/water.js.map +1 -0
  874. package/dist/currency.d.ts +94 -0
  875. package/dist/currency.js +425 -0
  876. package/dist/currency.js.map +1 -0
  877. package/dist/dev/devServer.d.ts +53 -0
  878. package/dist/dev/devServer.js +228 -0
  879. package/dist/dev/devServer.js.map +1 -0
  880. package/dist/dev/shellPage.d.ts +3 -0
  881. package/dist/dev/shellPage.js +297 -0
  882. package/dist/dev/shellPage.js.map +1 -0
  883. package/dist/dev/state.d.ts +84 -0
  884. package/dist/dev/state.js +265 -0
  885. package/dist/dev/state.js.map +1 -0
  886. package/dist/device.d.ts +104 -0
  887. package/dist/device.js +2744 -0
  888. package/dist/device.js.map +1 -0
  889. package/dist/deviceActionValidation.d.ts +21 -0
  890. package/dist/deviceActionValidation.js +460 -0
  891. package/dist/deviceActionValidation.js.map +1 -0
  892. package/dist/distribution.d.ts +69 -0
  893. package/dist/distribution.js +138 -0
  894. package/dist/distribution.js.map +1 -0
  895. package/dist/enginePins.d.ts +45 -0
  896. package/dist/enginePins.js +134 -0
  897. package/dist/enginePins.js.map +1 -0
  898. package/dist/gesture/axisReference.d.ts +22 -0
  899. package/dist/gesture/axisReference.js +32 -0
  900. package/dist/gesture/axisReference.js.map +1 -0
  901. package/dist/gesture/capture.d.ts +84 -0
  902. package/dist/gesture/capture.js +303 -0
  903. package/dist/gesture/capture.js.map +1 -0
  904. package/dist/gesture/harnessPage.d.ts +23 -0
  905. package/dist/gesture/harnessPage.js +153 -0
  906. package/dist/gesture/harnessPage.js.map +1 -0
  907. package/dist/gesture/inspect.d.ts +189 -0
  908. package/dist/gesture/inspect.js +678 -0
  909. package/dist/gesture/inspect.js.map +1 -0
  910. package/dist/gesture/rig.d.ts +12 -0
  911. package/dist/gesture/rig.js +111 -0
  912. package/dist/gesture/rig.js.map +1 -0
  913. package/dist/gesture/worldRuntime.d.ts +65 -0
  914. package/dist/gesture/worldRuntime.js +110 -0
  915. package/dist/gesture/worldRuntime.js.map +1 -0
  916. package/dist/glb/draw-calls.d.ts +60 -0
  917. package/dist/glb/draw-calls.js +160 -0
  918. package/dist/glb/draw-calls.js.map +1 -0
  919. package/dist/glb/glb-summary.d.ts +68 -0
  920. package/dist/glb/glb-summary.js +450 -0
  921. package/dist/glb/glb-summary.js.map +1 -0
  922. package/dist/glb/index.d.ts +12 -0
  923. package/dist/glb/index.js +24 -0
  924. package/dist/glb/index.js.map +1 -0
  925. package/dist/glb/smooth-normals.d.ts +98 -0
  926. package/dist/glb/smooth-normals.js +395 -0
  927. package/dist/glb/smooth-normals.js.map +1 -0
  928. package/dist/index.d.ts +1 -1
  929. package/dist/index.js +6786 -128
  930. package/dist/index.js.map +1 -1
  931. package/dist/init.d.ts +35 -1
  932. package/dist/init.js +1115 -47
  933. package/dist/init.js.map +1 -1
  934. package/dist/install.d.ts +16 -5
  935. package/dist/install.js +123 -23
  936. package/dist/install.js.map +1 -1
  937. package/dist/interactable.d.ts +154 -0
  938. package/dist/interactable.js +1219 -0
  939. package/dist/interactable.js.map +1 -0
  940. package/dist/item.d.ts +217 -0
  941. package/dist/item.js +892 -0
  942. package/dist/item.js.map +1 -0
  943. package/dist/itemDef/distribute.d.ts +17 -0
  944. package/dist/itemDef/distribute.js +29 -0
  945. package/dist/itemDef/distribute.js.map +1 -0
  946. package/dist/itemDef/emoteRules.d.ts +85 -0
  947. package/dist/itemDef/emoteRules.js +368 -0
  948. package/dist/itemDef/emoteRules.js.map +1 -0
  949. package/dist/itemDef/gunConfigRules.d.ts +24 -0
  950. package/dist/itemDef/gunConfigRules.js +300 -0
  951. package/dist/itemDef/gunConfigRules.js.map +1 -0
  952. package/dist/itemDef/inspect.d.ts +19 -0
  953. package/dist/itemDef/inspect.js +144 -0
  954. package/dist/itemDef/inspect.js.map +1 -0
  955. package/dist/itemDef/scaffold.d.ts +41 -0
  956. package/dist/itemDef/scaffold.js +303 -0
  957. package/dist/itemDef/scaffold.js.map +1 -0
  958. package/dist/itemDef/tables.d.ts +81 -0
  959. package/dist/itemDef/tables.js +226 -0
  960. package/dist/itemDef/tables.js.map +1 -0
  961. package/dist/itemDef/validate.d.ts +30 -0
  962. package/dist/itemDef/validate.js +175 -0
  963. package/dist/itemDef/validate.js.map +1 -0
  964. package/dist/itemPublishVersion.d.ts +46 -0
  965. package/dist/itemPublishVersion.js +242 -0
  966. package/dist/itemPublishVersion.js.map +1 -0
  967. package/dist/itemSearch.d.ts +128 -0
  968. package/dist/itemSearch.js +140 -0
  969. package/dist/itemSearch.js.map +1 -0
  970. package/dist/itemSetVersion.d.ts +42 -0
  971. package/dist/itemSetVersion.js +94 -0
  972. package/dist/itemSetVersion.js.map +1 -0
  973. package/dist/itemThumbnail.d.ts +40 -0
  974. package/dist/itemThumbnail.js +116 -0
  975. package/dist/itemThumbnail.js.map +1 -0
  976. package/dist/lib.d.ts +571 -7
  977. package/dist/lib.js +1178 -15
  978. package/dist/lib.js.map +1 -1
  979. package/dist/looks.d.ts +103 -0
  980. package/dist/looks.js +102 -0
  981. package/dist/looks.js.map +1 -0
  982. package/dist/materials/availability.d.ts +8 -0
  983. package/dist/materials/availability.js +22 -0
  984. package/dist/materials/availability.js.map +1 -0
  985. package/dist/materials/identity.d.ts +30 -0
  986. package/dist/materials/identity.js +68 -0
  987. package/dist/materials/identity.js.map +1 -0
  988. package/dist/materials/pins.d.ts +23 -0
  989. package/dist/materials/pins.js +93 -0
  990. package/dist/materials/pins.js.map +1 -0
  991. package/dist/mesh/surfaceBvh.d.ts +13 -0
  992. package/dist/mesh/surfaceBvh.js +197 -0
  993. package/dist/mesh/surfaceBvh.js.map +1 -0
  994. package/dist/module-validation.d.ts +2 -0
  995. package/dist/module-validation.js +24 -0
  996. package/dist/module-validation.js.map +1 -0
  997. package/dist/money.d.ts +183 -0
  998. package/dist/money.js +299 -0
  999. package/dist/money.js.map +1 -0
  1000. package/dist/npc/capture.d.ts +41 -0
  1001. package/dist/npc/capture.js +99 -0
  1002. package/dist/npc/capture.js.map +1 -0
  1003. package/dist/npc/format.d.ts +2 -0
  1004. package/dist/npc/format.js +102 -0
  1005. package/dist/npc/format.js.map +1 -0
  1006. package/dist/npc/inspect.d.ts +23 -0
  1007. package/dist/npc/inspect.js +54 -0
  1008. package/dist/npc/inspect.js.map +1 -0
  1009. package/dist/npc/metrics.d.ts +132 -0
  1010. package/dist/npc/metrics.js +214 -0
  1011. package/dist/npc/metrics.js.map +1 -0
  1012. package/dist/npc/session.d.ts +35 -0
  1013. package/dist/npc/session.js +172 -0
  1014. package/dist/npc/session.js.map +1 -0
  1015. package/dist/pack/locomotionReference.d.ts +40 -0
  1016. package/dist/pack/locomotionReference.js +132 -0
  1017. package/dist/pack/locomotionReference.js.map +1 -0
  1018. package/dist/pack/scaffold.d.ts +15 -0
  1019. package/dist/pack/scaffold.js +144 -0
  1020. package/dist/pack/scaffold.js.map +1 -0
  1021. package/dist/pack/validate.d.ts +67 -0
  1022. package/dist/pack/validate.js +317 -0
  1023. package/dist/pack/validate.js.map +1 -0
  1024. package/dist/package.d.ts +14 -1
  1025. package/dist/package.js +106 -7
  1026. package/dist/package.js.map +1 -1
  1027. package/dist/paletteShowcase.d.ts +183 -0
  1028. package/dist/paletteShowcase.js +454 -0
  1029. package/dist/paletteShowcase.js.map +1 -0
  1030. package/dist/paletteShowcaseProfiles.d.ts +112 -0
  1031. package/dist/paletteShowcaseProfiles.js +121 -0
  1032. package/dist/paletteShowcaseProfiles.js.map +1 -0
  1033. package/dist/paths.d.ts +4 -0
  1034. package/dist/paths.js +11 -0
  1035. package/dist/paths.js.map +1 -0
  1036. package/dist/placementRequest.d.ts +37 -0
  1037. package/dist/placementRequest.js +220 -0
  1038. package/dist/placementRequest.js.map +1 -0
  1039. package/dist/placements/assets.d.ts +7 -0
  1040. package/dist/placements/assets.js +114 -0
  1041. package/dist/placements/assets.js.map +1 -0
  1042. package/dist/placements/attachFoliageLods.d.ts +4 -0
  1043. package/dist/placements/attachFoliageLods.js +70 -0
  1044. package/dist/placements/attachFoliageLods.js.map +1 -0
  1045. package/dist/placements/attachImpostors.d.ts +3 -0
  1046. package/dist/placements/attachImpostors.js +51 -0
  1047. package/dist/placements/attachImpostors.js.map +1 -0
  1048. package/dist/placements/authored.d.ts +11 -0
  1049. package/dist/placements/authored.js +65 -0
  1050. package/dist/placements/authored.js.map +1 -0
  1051. package/dist/placements/bake.d.ts +2 -0
  1052. package/dist/placements/bake.js +235 -0
  1053. package/dist/placements/bake.js.map +1 -0
  1054. package/dist/placements/captureHost.d.ts +4 -0
  1055. package/dist/placements/captureHost.js +125 -0
  1056. package/dist/placements/captureHost.js.map +1 -0
  1057. package/dist/placements/foliageCapture.d.ts +2 -0
  1058. package/dist/placements/foliageCapture.js +98 -0
  1059. package/dist/placements/foliageCapture.js.map +1 -0
  1060. package/dist/placements/foliageCards.d.ts +17 -0
  1061. package/dist/placements/foliageCards.js +120 -0
  1062. package/dist/placements/foliageCards.js.map +1 -0
  1063. package/dist/placements/foliageLods.d.ts +8 -0
  1064. package/dist/placements/foliageLods.js +240 -0
  1065. package/dist/placements/foliageLods.js.map +1 -0
  1066. package/dist/placements/foliageTexture.d.ts +4 -0
  1067. package/dist/placements/foliageTexture.js +91 -0
  1068. package/dist/placements/foliageTexture.js.map +1 -0
  1069. package/dist/placements/impostorCapture.d.ts +2 -0
  1070. package/dist/placements/impostorCapture.js +111 -0
  1071. package/dist/placements/impostorCapture.js.map +1 -0
  1072. package/dist/placements/impostors.d.ts +18 -0
  1073. package/dist/placements/impostors.js +279 -0
  1074. package/dist/placements/impostors.js.map +1 -0
  1075. package/dist/placements/source.d.ts +53 -0
  1076. package/dist/placements/source.js +111 -0
  1077. package/dist/placements/source.js.map +1 -0
  1078. package/dist/product.d.ts +84 -0
  1079. package/dist/product.js +285 -0
  1080. package/dist/product.js.map +1 -0
  1081. package/dist/publications.d.ts +116 -0
  1082. package/dist/publications.js +180 -0
  1083. package/dist/publications.js.map +1 -0
  1084. package/dist/publishDuplicateGuard.d.ts +92 -0
  1085. package/dist/publishDuplicateGuard.js +128 -0
  1086. package/dist/publishDuplicateGuard.js.map +1 -0
  1087. package/dist/realizability.d.ts +36 -0
  1088. package/dist/realizability.js +269 -0
  1089. package/dist/realizability.js.map +1 -0
  1090. package/dist/resolve.d.ts +7 -1
  1091. package/dist/resolve.js +77 -11
  1092. package/dist/resolve.js.map +1 -1
  1093. package/dist/sceneElements/compiler.d.ts +21 -0
  1094. package/dist/sceneElements/compiler.js +976 -0
  1095. package/dist/sceneElements/compiler.js.map +1 -0
  1096. package/dist/sceneElements/continuum.d.ts +54 -0
  1097. package/dist/sceneElements/continuum.js +451 -0
  1098. package/dist/sceneElements/continuum.js.map +1 -0
  1099. package/dist/sceneElements/devices.d.ts +12 -0
  1100. package/dist/sceneElements/devices.js +212 -0
  1101. package/dist/sceneElements/devices.js.map +1 -0
  1102. package/dist/sceneElements/meshCells.d.ts +49 -0
  1103. package/dist/sceneElements/meshCells.js +174 -0
  1104. package/dist/sceneElements/meshCells.js.map +1 -0
  1105. package/dist/sceneElements/types.d.ts +261 -0
  1106. package/dist/sceneElements/types.js +3 -0
  1107. package/dist/sceneElements/types.js.map +1 -0
  1108. package/dist/sceneHlod/approximate.d.ts +23 -0
  1109. package/dist/sceneHlod/approximate.js +171 -0
  1110. package/dist/sceneHlod/approximate.js.map +1 -0
  1111. package/dist/sceneHlod/artifact.d.ts +3 -0
  1112. package/dist/sceneHlod/artifact.js +29 -0
  1113. package/dist/sceneHlod/artifact.js.map +1 -0
  1114. package/dist/sceneHlod/bakeSurface.d.ts +2 -0
  1115. package/dist/sceneHlod/bakeSurface.js +59 -0
  1116. package/dist/sceneHlod/bakeSurface.js.map +1 -0
  1117. package/dist/sceneHlod/basisEncoder.d.ts +3 -0
  1118. package/dist/sceneHlod/basisEncoder.js +68 -0
  1119. package/dist/sceneHlod/basisEncoder.js.map +1 -0
  1120. package/dist/sceneHlod/cellArtifact.d.ts +17 -0
  1121. package/dist/sceneHlod/cellArtifact.js +78 -0
  1122. package/dist/sceneHlod/cellArtifact.js.map +1 -0
  1123. package/dist/sceneHlod/commands.d.ts +2 -0
  1124. package/dist/sceneHlod/commands.js +114 -0
  1125. package/dist/sceneHlod/commands.js.map +1 -0
  1126. package/dist/sceneHlod/complete.d.ts +78 -0
  1127. package/dist/sceneHlod/complete.js +261 -0
  1128. package/dist/sceneHlod/complete.js.map +1 -0
  1129. package/dist/sceneHlod/completePrototype.d.ts +39 -0
  1130. package/dist/sceneHlod/completePrototype.js +121 -0
  1131. package/dist/sceneHlod/completePrototype.js.map +1 -0
  1132. package/dist/sceneHlod/geometry.d.ts +6 -0
  1133. package/dist/sceneHlod/geometry.js +101 -0
  1134. package/dist/sceneHlod/geometry.js.map +1 -0
  1135. package/dist/sceneHlod/imageSampling.d.ts +11 -0
  1136. package/dist/sceneHlod/imageSampling.js +100 -0
  1137. package/dist/sceneHlod/imageSampling.js.map +1 -0
  1138. package/dist/sceneHlod/refinement.d.ts +46 -0
  1139. package/dist/sceneHlod/refinement.js +204 -0
  1140. package/dist/sceneHlod/refinement.js.map +1 -0
  1141. package/dist/sceneHlod/scene.d.ts +80 -0
  1142. package/dist/sceneHlod/scene.js +264 -0
  1143. package/dist/sceneHlod/scene.js.map +1 -0
  1144. package/dist/sceneHlod/sharedAtlas.d.ts +37 -0
  1145. package/dist/sceneHlod/sharedAtlas.js +84 -0
  1146. package/dist/sceneHlod/sharedAtlas.js.map +1 -0
  1147. package/dist/sceneHlod/source.d.ts +17 -0
  1148. package/dist/sceneHlod/source.js +241 -0
  1149. package/dist/sceneHlod/source.js.map +1 -0
  1150. package/dist/sceneHlod/textureCodec.d.ts +4 -0
  1151. package/dist/sceneHlod/textureCodec.js +66 -0
  1152. package/dist/sceneHlod/textureCodec.js.map +1 -0
  1153. package/dist/sceneHlod/transfer.d.ts +8 -0
  1154. package/dist/sceneHlod/transfer.js +147 -0
  1155. package/dist/sceneHlod/transfer.js.map +1 -0
  1156. package/dist/sceneHlod/types.d.ts +69 -0
  1157. package/dist/sceneHlod/types.js +3 -0
  1158. package/dist/sceneHlod/types.js.map +1 -0
  1159. package/dist/sceneImport/archive.d.ts +30 -0
  1160. package/dist/sceneImport/archive.js +336 -0
  1161. package/dist/sceneImport/archive.js.map +1 -0
  1162. package/dist/sceneImport/bistroMaterialBake.d.ts +20 -0
  1163. package/dist/sceneImport/bistroMaterialBake.js +169 -0
  1164. package/dist/sceneImport/bistroMaterialBake.js.map +1 -0
  1165. package/dist/sceneImport/bistroTexturePlan.d.ts +6 -0
  1166. package/dist/sceneImport/bistroTexturePlan.js +23 -0
  1167. package/dist/sceneImport/bistroTexturePlan.js.map +1 -0
  1168. package/dist/sceneImport/compiler.d.ts +36 -0
  1169. package/dist/sceneImport/compiler.js +251 -0
  1170. package/dist/sceneImport/compiler.js.map +1 -0
  1171. package/dist/sceneImport/composeMounts.d.ts +159 -0
  1172. package/dist/sceneImport/composeMounts.js +687 -0
  1173. package/dist/sceneImport/composeMounts.js.map +1 -0
  1174. package/dist/sceneImport/defaultMaterials.d.ts +45 -0
  1175. package/dist/sceneImport/defaultMaterials.js +121 -0
  1176. package/dist/sceneImport/defaultMaterials.js.map +1 -0
  1177. package/dist/sceneImport/externalTextures.d.ts +44 -0
  1178. package/dist/sceneImport/externalTextures.js +146 -0
  1179. package/dist/sceneImport/externalTextures.js.map +1 -0
  1180. package/dist/sceneImport/fbx.d.ts +101 -0
  1181. package/dist/sceneImport/fbx.js +307 -0
  1182. package/dist/sceneImport/fbx.js.map +1 -0
  1183. package/dist/sceneImport/glbSplit.d.ts +24 -0
  1184. package/dist/sceneImport/glbSplit.js +95 -0
  1185. package/dist/sceneImport/glbSplit.js.map +1 -0
  1186. package/dist/sceneImport/gltfIo.d.ts +32 -0
  1187. package/dist/sceneImport/gltfIo.js +39 -0
  1188. package/dist/sceneImport/gltfIo.js.map +1 -0
  1189. package/dist/sceneImport/helsinkiTiles.d.ts +31 -0
  1190. package/dist/sceneImport/helsinkiTiles.js +52 -0
  1191. package/dist/sceneImport/helsinkiTiles.js.map +1 -0
  1192. package/dist/sceneImport/materials/binding.d.ts +16 -0
  1193. package/dist/sceneImport/materials/binding.js +42 -0
  1194. package/dist/sceneImport/materials/binding.js.map +1 -0
  1195. package/dist/sceneImport/materials/catalog.d.ts +36 -0
  1196. package/dist/sceneImport/materials/catalog.js +233 -0
  1197. package/dist/sceneImport/materials/catalog.js.map +1 -0
  1198. package/dist/sceneImport/materials/index.d.ts +4 -0
  1199. package/dist/sceneImport/materials/index.js +21 -0
  1200. package/dist/sceneImport/materials/index.js.map +1 -0
  1201. package/dist/sceneImport/materials/matcher.d.ts +33 -0
  1202. package/dist/sceneImport/materials/matcher.js +127 -0
  1203. package/dist/sceneImport/materials/matcher.js.map +1 -0
  1204. package/dist/sceneImport/materials/recipe.d.ts +30 -0
  1205. package/dist/sceneImport/materials/recipe.js +134 -0
  1206. package/dist/sceneImport/materials/recipe.js.map +1 -0
  1207. package/dist/sceneImport/multiAsset.d.ts +79 -0
  1208. package/dist/sceneImport/multiAsset.js +535 -0
  1209. package/dist/sceneImport/multiAsset.js.map +1 -0
  1210. package/dist/sceneImport/multiAssetSpawn.d.ts +40 -0
  1211. package/dist/sceneImport/multiAssetSpawn.js +98 -0
  1212. package/dist/sceneImport/multiAssetSpawn.js.map +1 -0
  1213. package/dist/sceneImport/obj.d.ts +41 -0
  1214. package/dist/sceneImport/obj.js +276 -0
  1215. package/dist/sceneImport/obj.js.map +1 -0
  1216. package/dist/sceneImport/package.d.ts +104 -0
  1217. package/dist/sceneImport/package.js +1004 -0
  1218. package/dist/sceneImport/package.js.map +1 -0
  1219. package/dist/sceneImport/packageReader.d.ts +10 -0
  1220. package/dist/sceneImport/packageReader.js +250 -0
  1221. package/dist/sceneImport/packageReader.js.map +1 -0
  1222. package/dist/sceneImport/proxy.d.ts +100 -0
  1223. package/dist/sceneImport/proxy.js +334 -0
  1224. package/dist/sceneImport/proxy.js.map +1 -0
  1225. package/dist/sceneImport/publish.d.ts +47 -0
  1226. package/dist/sceneImport/publish.js +98 -0
  1227. package/dist/sceneImport/publish.js.map +1 -0
  1228. package/dist/sceneImport/semantic.d.ts +75 -0
  1229. package/dist/sceneImport/semantic.js +296 -0
  1230. package/dist/sceneImport/semantic.js.map +1 -0
  1231. package/dist/sceneImport/spawnProbe.d.ts +55 -0
  1232. package/dist/sceneImport/spawnProbe.js +159 -0
  1233. package/dist/sceneImport/spawnProbe.js.map +1 -0
  1234. package/dist/sceneImport/streamLayout.d.ts +96 -0
  1235. package/dist/sceneImport/streamLayout.js +203 -0
  1236. package/dist/sceneImport/streamLayout.js.map +1 -0
  1237. package/dist/sceneImport/textureDecode.d.ts +21 -0
  1238. package/dist/sceneImport/textureDecode.js +292 -0
  1239. package/dist/sceneImport/textureDecode.js.map +1 -0
  1240. package/dist/sceneImport/types.d.ts +84 -0
  1241. package/dist/sceneImport/types.js +58 -0
  1242. package/dist/sceneImport/types.js.map +1 -0
  1243. package/dist/scenePerformance.d.ts +162 -0
  1244. package/dist/scenePerformance.js +905 -0
  1245. package/dist/scenePerformance.js.map +1 -0
  1246. package/dist/screenshot/captureScreenshots.d.ts +36 -0
  1247. package/dist/screenshot/captureScreenshots.js +229 -0
  1248. package/dist/screenshot/captureScreenshots.js.map +1 -0
  1249. package/dist/screenshot/encodeImagePreview.d.ts +5 -0
  1250. package/dist/screenshot/encodeImagePreview.js +42 -0
  1251. package/dist/screenshot/encodeImagePreview.js.map +1 -0
  1252. package/dist/screenshot/publishThumbnail.d.ts +4 -0
  1253. package/dist/screenshot/publishThumbnail.js +56 -0
  1254. package/dist/screenshot/publishThumbnail.js.map +1 -0
  1255. package/dist/screenshot/staticServe.d.ts +14 -0
  1256. package/dist/screenshot/staticServe.js +120 -0
  1257. package/dist/screenshot/staticServe.js.map +1 -0
  1258. package/dist/source-archive.d.ts +101 -0
  1259. package/dist/source-archive.js +309 -0
  1260. package/dist/source-archive.js.map +1 -0
  1261. package/dist/stdioBlocking.d.ts +1 -0
  1262. package/dist/stdioBlocking.js +9 -0
  1263. package/dist/stdioBlocking.js.map +1 -0
  1264. package/dist/terrain/bake.d.ts +40 -0
  1265. package/dist/terrain/bake.js +318 -0
  1266. package/dist/terrain/bake.js.map +1 -0
  1267. package/dist/terrain/generate.d.ts +21 -0
  1268. package/dist/terrain/generate.js +239 -0
  1269. package/dist/terrain/generate.js.map +1 -0
  1270. package/dist/terrain/grid.d.ts +48 -0
  1271. package/dist/terrain/grid.js +133 -0
  1272. package/dist/terrain/grid.js.map +1 -0
  1273. package/dist/terrain/import.d.ts +40 -0
  1274. package/dist/terrain/import.js +252 -0
  1275. package/dist/terrain/import.js.map +1 -0
  1276. package/dist/terrain/index.d.ts +11 -0
  1277. package/dist/terrain/index.js +88 -0
  1278. package/dist/terrain/index.js.map +1 -0
  1279. package/dist/terrain/inspect.d.ts +35 -0
  1280. package/dist/terrain/inspect.js +115 -0
  1281. package/dist/terrain/inspect.js.map +1 -0
  1282. package/dist/terrain/island.d.ts +31 -0
  1283. package/dist/terrain/island.js +128 -0
  1284. package/dist/terrain/island.js.map +1 -0
  1285. package/dist/terrain/noise.d.ts +79 -0
  1286. package/dist/terrain/noise.js +162 -0
  1287. package/dist/terrain/noise.js.map +1 -0
  1288. package/dist/terrain/normals.d.ts +21 -0
  1289. package/dist/terrain/normals.js +55 -0
  1290. package/dist/terrain/normals.js.map +1 -0
  1291. package/dist/terrain/presets/alpine.json +20 -0
  1292. package/dist/terrain/presets/coast.json +20 -0
  1293. package/dist/terrain/presets/desert.json +22 -0
  1294. package/dist/terrain/presets/forest.json +20 -0
  1295. package/dist/terrain/presets/meadow.json +20 -0
  1296. package/dist/terrain/presets/volcanic.json +22 -0
  1297. package/dist/terrain/presets.d.ts +29 -0
  1298. package/dist/terrain/presets.js +128 -0
  1299. package/dist/terrain/presets.js.map +1 -0
  1300. package/dist/terrain/source.d.ts +42 -0
  1301. package/dist/terrain/source.js +241 -0
  1302. package/dist/terrain/source.js.map +1 -0
  1303. package/dist/terrain/tile.d.ts +92 -0
  1304. package/dist/terrain/tile.js +268 -0
  1305. package/dist/terrain/tile.js.map +1 -0
  1306. package/dist/textureAudit.d.ts +23 -0
  1307. package/dist/textureAudit.js +192 -0
  1308. package/dist/textureAudit.js.map +1 -0
  1309. package/dist/tsconfig.build.tsbuildinfo +1 -1
  1310. package/dist/unreal/avatarMode.d.ts +21 -0
  1311. package/dist/unreal/avatarMode.js +33 -0
  1312. package/dist/unreal/avatarMode.js.map +1 -0
  1313. package/dist/unreal/delivery.d.ts +46 -0
  1314. package/dist/unreal/delivery.js +89 -0
  1315. package/dist/unreal/delivery.js.map +1 -0
  1316. package/dist/unreal/doctor.d.ts +50 -0
  1317. package/dist/unreal/doctor.js +102 -0
  1318. package/dist/unreal/doctor.js.map +1 -0
  1319. package/dist/unreal/package.d.ts +80 -0
  1320. package/dist/unreal/package.js +273 -0
  1321. package/dist/unreal/package.js.map +1 -0
  1322. package/dist/unreal/release.d.ts +41 -0
  1323. package/dist/unreal/release.js +122 -0
  1324. package/dist/unreal/release.js.map +1 -0
  1325. package/dist/unreal.d.ts +30 -0
  1326. package/dist/unreal.js +362 -0
  1327. package/dist/unreal.js.map +1 -0
  1328. package/dist/unrealCandidate.d.ts +213 -0
  1329. package/dist/unrealCandidate.js +765 -0
  1330. package/dist/unrealCandidate.js.map +1 -0
  1331. package/dist/unrealManifest.d.ts +74 -0
  1332. package/dist/unrealManifest.js +354 -0
  1333. package/dist/unrealManifest.js.map +1 -0
  1334. package/dist/unrealPublish.d.ts +111 -0
  1335. package/dist/unrealPublish.js +331 -0
  1336. package/dist/unrealPublish.js.map +1 -0
  1337. package/dist/vault.d.ts +121 -0
  1338. package/dist/vault.js +136 -0
  1339. package/dist/vault.js.map +1 -0
  1340. package/dist/vehicle/addOnDefinition.d.ts +19 -0
  1341. package/dist/vehicle/addOnDefinition.js +21 -0
  1342. package/dist/vehicle/addOnDefinition.js.map +1 -0
  1343. package/dist/vehicle/addon.d.ts +158 -0
  1344. package/dist/vehicle/addon.js +441 -0
  1345. package/dist/vehicle/addon.js.map +1 -0
  1346. package/dist/vehicle/addonDefinitionGuard.d.ts +53 -0
  1347. package/dist/vehicle/addonDefinitionGuard.js +206 -0
  1348. package/dist/vehicle/addonDefinitionGuard.js.map +1 -0
  1349. package/dist/vehicle/addonPublished.d.ts +80 -0
  1350. package/dist/vehicle/addonPublished.js +221 -0
  1351. package/dist/vehicle/addonPublished.js.map +1 -0
  1352. package/dist/vehicle/audio.d.ts +259 -0
  1353. package/dist/vehicle/audio.js +1069 -0
  1354. package/dist/vehicle/audio.js.map +1 -0
  1355. package/dist/vehicle/audioDefects.d.ts +125 -0
  1356. package/dist/vehicle/audioDefects.js +591 -0
  1357. package/dist/vehicle/audioDefects.js.map +1 -0
  1358. package/dist/vehicle/audioDistinct.d.ts +62 -0
  1359. package/dist/vehicle/audioDistinct.js +479 -0
  1360. package/dist/vehicle/audioDistinct.js.map +1 -0
  1361. package/dist/vehicle/audioImport.d.ts +217 -0
  1362. package/dist/vehicle/audioImport.js +610 -0
  1363. package/dist/vehicle/audioImport.js.map +1 -0
  1364. package/dist/vehicle/audioProvenance.d.ts +47 -0
  1365. package/dist/vehicle/audioProvenance.js +364 -0
  1366. package/dist/vehicle/audioProvenance.js.map +1 -0
  1367. package/dist/vehicle/audioReference.d.ts +36 -0
  1368. package/dist/vehicle/audioReference.js +176 -0
  1369. package/dist/vehicle/audioReference.js.map +1 -0
  1370. package/dist/vehicle/audioSlots.d.ts +27 -0
  1371. package/dist/vehicle/audioSlots.js +43 -0
  1372. package/dist/vehicle/audioSlots.js.map +1 -0
  1373. package/dist/vehicle/audioSpectral.d.ts +71 -0
  1374. package/dist/vehicle/audioSpectral.js +534 -0
  1375. package/dist/vehicle/audioSpectral.js.map +1 -0
  1376. package/dist/vehicle/cabinCheck.d.ts +209 -0
  1377. package/dist/vehicle/cabinCheck.js +799 -0
  1378. package/dist/vehicle/cabinCheck.js.map +1 -0
  1379. package/dist/vehicle/drive.d.ts +66 -0
  1380. package/dist/vehicle/drive.js +228 -0
  1381. package/dist/vehicle/drive.js.map +1 -0
  1382. package/dist/vehicle/enginePolicy.d.ts +68 -0
  1383. package/dist/vehicle/enginePolicy.js +209 -0
  1384. package/dist/vehicle/enginePolicy.js.map +1 -0
  1385. package/dist/vehicle/hostFrame.d.ts +78 -0
  1386. package/dist/vehicle/hostFrame.js +136 -0
  1387. package/dist/vehicle/hostFrame.js.map +1 -0
  1388. package/dist/vehicle/inspectionSheets.d.ts +42 -0
  1389. package/dist/vehicle/inspectionSheets.js +173 -0
  1390. package/dist/vehicle/inspectionSheets.js.map +1 -0
  1391. package/dist/vehicle/keyboardLaunch.d.ts +189 -0
  1392. package/dist/vehicle/keyboardLaunch.js +340 -0
  1393. package/dist/vehicle/keyboardLaunch.js.map +1 -0
  1394. package/dist/vehicle/lampCoverage.d.ts +49 -0
  1395. package/dist/vehicle/lampCoverage.js +252 -0
  1396. package/dist/vehicle/lampCoverage.js.map +1 -0
  1397. package/dist/vehicle/mintAddOn.d.ts +110 -0
  1398. package/dist/vehicle/mintAddOn.js +321 -0
  1399. package/dist/vehicle/mintAddOn.js.map +1 -0
  1400. package/dist/vehicle/mintVehicle.d.ts +189 -0
  1401. package/dist/vehicle/mintVehicle.js +417 -0
  1402. package/dist/vehicle/mintVehicle.js.map +1 -0
  1403. package/dist/vehicle/paintHue.d.ts +89 -0
  1404. package/dist/vehicle/paintHue.js +248 -0
  1405. package/dist/vehicle/paintHue.js.map +1 -0
  1406. package/dist/vehicle/panelCoverage.d.ts +37 -0
  1407. package/dist/vehicle/panelCoverage.js +93 -0
  1408. package/dist/vehicle/panelCoverage.js.map +1 -0
  1409. package/dist/vehicle/platform.d.ts +71 -0
  1410. package/dist/vehicle/platform.js +144 -0
  1411. package/dist/vehicle/platform.js.map +1 -0
  1412. package/dist/vehicle/preview.d.ts +339 -0
  1413. package/dist/vehicle/preview.js +854 -0
  1414. package/dist/vehicle/preview.js.map +1 -0
  1415. package/dist/vehicle/previewAddon.d.ts +197 -0
  1416. package/dist/vehicle/previewAddon.js +520 -0
  1417. package/dist/vehicle/previewAddon.js.map +1 -0
  1418. package/dist/vehicle/previewSeats.d.ts +102 -0
  1419. package/dist/vehicle/previewSeats.js +190 -0
  1420. package/dist/vehicle/previewSeats.js.map +1 -0
  1421. package/dist/vehicle/publish.d.ts +78 -0
  1422. package/dist/vehicle/publish.js +111 -0
  1423. package/dist/vehicle/publish.js.map +1 -0
  1424. package/dist/vehicle/recheckListed.d.ts +87 -0
  1425. package/dist/vehicle/recheckListed.js +200 -0
  1426. package/dist/vehicle/recheckListed.js.map +1 -0
  1427. package/dist/vehicle/renditionManifest.d.ts +10 -0
  1428. package/dist/vehicle/renditionManifest.js +56 -0
  1429. package/dist/vehicle/renditionManifest.js.map +1 -0
  1430. package/dist/vehicle/sealCheck.d.ts +30 -0
  1431. package/dist/vehicle/sealCheck.js +59 -0
  1432. package/dist/vehicle/sealCheck.js.map +1 -0
  1433. package/dist/vehicle/simulate.d.ts +219 -0
  1434. package/dist/vehicle/simulate.js +536 -0
  1435. package/dist/vehicle/simulate.js.map +1 -0
  1436. package/dist/vehicle/simulateRuntime.d.ts +76 -0
  1437. package/dist/vehicle/simulateRuntime.js +252 -0
  1438. package/dist/vehicle/simulateRuntime.js.map +1 -0
  1439. package/dist/vehicle/testutil/sourcedAudio.d.ts +13 -0
  1440. package/dist/vehicle/testutil/sourcedAudio.js +96 -0
  1441. package/dist/vehicle/testutil/sourcedAudio.js.map +1 -0
  1442. package/dist/vehicle/validate.d.ts +225 -0
  1443. package/dist/vehicle/validate.js +956 -0
  1444. package/dist/vehicle/validate.js.map +1 -0
  1445. package/dist/vehicle/wheelDesign.d.ts +98 -0
  1446. package/dist/vehicle/wheelDesign.js +276 -0
  1447. package/dist/vehicle/wheelDesign.js.map +1 -0
  1448. package/dist/verifySubPath.d.ts +69 -0
  1449. package/dist/verifySubPath.js +458 -0
  1450. package/dist/verifySubPath.js.map +1 -0
  1451. package/dist/visualQa/animation.d.ts +57 -0
  1452. package/dist/visualQa/animation.js +503 -0
  1453. package/dist/visualQa/animation.js.map +1 -0
  1454. package/dist/visualQa/avatar.d.ts +3 -0
  1455. package/dist/visualQa/avatar.js +443 -0
  1456. package/dist/visualQa/avatar.js.map +1 -0
  1457. package/dist/visualQa/avatarMath.d.ts +180 -0
  1458. package/dist/visualQa/avatarMath.js +318 -0
  1459. package/dist/visualQa/avatarMath.js.map +1 -0
  1460. package/dist/visualQa/avatarPreview.d.ts +26 -0
  1461. package/dist/visualQa/avatarPreview.js +167 -0
  1462. package/dist/visualQa/avatarPreview.js.map +1 -0
  1463. package/dist/visualQa/avatarPreviewMath.d.ts +189 -0
  1464. package/dist/visualQa/avatarPreviewMath.js +696 -0
  1465. package/dist/visualQa/avatarPreviewMath.js.map +1 -0
  1466. package/dist/visualQa/avatarPreviewProbe.d.ts +7 -0
  1467. package/dist/visualQa/avatarPreviewProbe.js +181 -0
  1468. package/dist/visualQa/avatarPreviewProbe.js.map +1 -0
  1469. package/dist/visualQa/avatarProbe.d.ts +1 -0
  1470. package/dist/visualQa/avatarProbe.js +264 -0
  1471. package/dist/visualQa/avatarProbe.js.map +1 -0
  1472. package/dist/visualQa/browser.d.ts +116 -0
  1473. package/dist/visualQa/browser.js +817 -0
  1474. package/dist/visualQa/browser.js.map +1 -0
  1475. package/dist/visualQa/candidate.d.ts +116 -0
  1476. package/dist/visualQa/candidate.js +265 -0
  1477. package/dist/visualQa/candidate.js.map +1 -0
  1478. package/dist/visualQa/checklists.d.ts +31 -0
  1479. package/dist/visualQa/checklists.js +160 -0
  1480. package/dist/visualQa/checklists.js.map +1 -0
  1481. package/dist/visualQa/command.d.ts +110 -0
  1482. package/dist/visualQa/command.js +521 -0
  1483. package/dist/visualQa/command.js.map +1 -0
  1484. package/dist/visualQa/commonAsserts.d.ts +68 -0
  1485. package/dist/visualQa/commonAsserts.js +239 -0
  1486. package/dist/visualQa/commonAsserts.js.map +1 -0
  1487. package/dist/visualQa/contactSheet.d.ts +32 -0
  1488. package/dist/visualQa/contactSheet.js +153 -0
  1489. package/dist/visualQa/contactSheet.js.map +1 -0
  1490. package/dist/visualQa/critic.d.ts +18 -0
  1491. package/dist/visualQa/critic.js +179 -0
  1492. package/dist/visualQa/critic.js.map +1 -0
  1493. package/dist/visualQa/emotePage.d.ts +10 -0
  1494. package/dist/visualQa/emotePage.js +249 -0
  1495. package/dist/visualQa/emotePage.js.map +1 -0
  1496. package/dist/visualQa/evidenceOverlay.d.ts +74 -0
  1497. package/dist/visualQa/evidenceOverlay.js +268 -0
  1498. package/dist/visualQa/evidenceOverlay.js.map +1 -0
  1499. package/dist/visualQa/harness.d.ts +57 -0
  1500. package/dist/visualQa/harness.js +3 -0
  1501. package/dist/visualQa/harness.js.map +1 -0
  1502. package/dist/visualQa/hosted.d.ts +152 -0
  1503. package/dist/visualQa/hosted.js +367 -0
  1504. package/dist/visualQa/hosted.js.map +1 -0
  1505. package/dist/visualQa/labelLimit.d.ts +12 -0
  1506. package/dist/visualQa/labelLimit.js +31 -0
  1507. package/dist/visualQa/labelLimit.js.map +1 -0
  1508. package/dist/visualQa/mirror.d.ts +36 -0
  1509. package/dist/visualQa/mirror.js +98 -0
  1510. package/dist/visualQa/mirror.js.map +1 -0
  1511. package/dist/visualQa/moveUx.d.ts +44 -0
  1512. package/dist/visualQa/moveUx.js +103 -0
  1513. package/dist/visualQa/moveUx.js.map +1 -0
  1514. package/dist/visualQa/pinnedChrome.d.ts +63 -0
  1515. package/dist/visualQa/pinnedChrome.js +214 -0
  1516. package/dist/visualQa/pinnedChrome.js.map +1 -0
  1517. package/dist/visualQa/resolve.d.ts +88 -0
  1518. package/dist/visualQa/resolve.js +248 -0
  1519. package/dist/visualQa/resolve.js.map +1 -0
  1520. package/dist/visualQa/scene.d.ts +14 -0
  1521. package/dist/visualQa/scene.js +688 -0
  1522. package/dist/visualQa/scene.js.map +1 -0
  1523. package/dist/visualQa/shot.d.ts +2 -0
  1524. package/dist/visualQa/shot.js +27 -0
  1525. package/dist/visualQa/shot.js.map +1 -0
  1526. package/dist/visualQa/signIn.d.ts +35 -0
  1527. package/dist/visualQa/signIn.js +144 -0
  1528. package/dist/visualQa/signIn.js.map +1 -0
  1529. package/dist/visualQa/submitBudget.d.ts +25 -0
  1530. package/dist/visualQa/submitBudget.js +82 -0
  1531. package/dist/visualQa/submitBudget.js.map +1 -0
  1532. package/dist/visualQa/types.d.ts +195 -0
  1533. package/dist/visualQa/types.js +12 -0
  1534. package/dist/visualQa/types.js.map +1 -0
  1535. package/dist/visualQa/vehicle.d.ts +130 -0
  1536. package/dist/visualQa/vehicle.js +2001 -0
  1537. package/dist/visualQa/vehicle.js.map +1 -0
  1538. package/dist/visualQa/vehicleAddonProbe.d.ts +1 -0
  1539. package/dist/visualQa/vehicleAddonProbe.js +115 -0
  1540. package/dist/visualQa/vehicleAddonProbe.js.map +1 -0
  1541. package/dist/visualQa/vehicleCabinFit.d.ts +78 -0
  1542. package/dist/visualQa/vehicleCabinFit.js +55 -0
  1543. package/dist/visualQa/vehicleCabinFit.js.map +1 -0
  1544. package/dist/visualQa/vehicleClearance.d.ts +135 -0
  1545. package/dist/visualQa/vehicleClearance.js +299 -0
  1546. package/dist/visualQa/vehicleClearance.js.map +1 -0
  1547. package/dist/visualQa/vehicleDriveAlive.d.ts +55 -0
  1548. package/dist/visualQa/vehicleDriveAlive.js +103 -0
  1549. package/dist/visualQa/vehicleDriveAlive.js.map +1 -0
  1550. package/dist/visualQa/vehicleGrip.d.ts +156 -0
  1551. package/dist/visualQa/vehicleGrip.js +439 -0
  1552. package/dist/visualQa/vehicleGrip.js.map +1 -0
  1553. package/dist/visualQa/vehicleInspection.d.ts +30 -0
  1554. package/dist/visualQa/vehicleInspection.js +189 -0
  1555. package/dist/visualQa/vehicleInspection.js.map +1 -0
  1556. package/dist/visualQa/vehicleLamps.d.ts +118 -0
  1557. package/dist/visualQa/vehicleLamps.js +374 -0
  1558. package/dist/visualQa/vehicleLamps.js.map +1 -0
  1559. package/dist/visualQa/vehicleMath.d.ts +440 -0
  1560. package/dist/visualQa/vehicleMath.js +967 -0
  1561. package/dist/visualQa/vehicleMath.js.map +1 -0
  1562. package/dist/visualQa/vehicleOccupants.d.ts +66 -0
  1563. package/dist/visualQa/vehicleOccupants.js +448 -0
  1564. package/dist/visualQa/vehicleOccupants.js.map +1 -0
  1565. package/dist/visualQa/vehiclePenetration.d.ts +172 -0
  1566. package/dist/visualQa/vehiclePenetration.js +1157 -0
  1567. package/dist/visualQa/vehiclePenetration.js.map +1 -0
  1568. package/dist/visualQa/vehiclePoses.d.ts +25 -0
  1569. package/dist/visualQa/vehiclePoses.js +56 -0
  1570. package/dist/visualQa/vehiclePoses.js.map +1 -0
  1571. package/dist/visualQa/vehiclePosture.d.ts +78 -0
  1572. package/dist/visualQa/vehiclePosture.js +263 -0
  1573. package/dist/visualQa/vehiclePosture.js.map +1 -0
  1574. package/dist/visualQa/vehiclePreview.d.ts +103 -0
  1575. package/dist/visualQa/vehiclePreview.js +312 -0
  1576. package/dist/visualQa/vehiclePreview.js.map +1 -0
  1577. package/dist/visualQa/vehicleProbe.d.ts +3 -0
  1578. package/dist/visualQa/vehicleProbe.js +670 -0
  1579. package/dist/visualQa/vehicleProbe.js.map +1 -0
  1580. package/dist/visualQa/vehicleStance.d.ts +108 -0
  1581. package/dist/visualQa/vehicleStance.js +200 -0
  1582. package/dist/visualQa/vehicleStance.js.map +1 -0
  1583. package/dist/visualQa/viewer.d.ts +6 -0
  1584. package/dist/visualQa/viewer.js +750 -0
  1585. package/dist/visualQa/viewer.js.map +1 -0
  1586. package/dist/visualQa/viewerGeometry.d.ts +116 -0
  1587. package/dist/visualQa/viewerGeometry.js +476 -0
  1588. package/dist/visualQa/viewerGeometry.js.map +1 -0
  1589. package/dist/visualQa/viewerPage.d.ts +11 -0
  1590. package/dist/visualQa/viewerPage.js +414 -0
  1591. package/dist/visualQa/viewerPage.js.map +1 -0
  1592. package/dist/visualQa/webgpuSelfTest.d.ts +52 -0
  1593. package/dist/visualQa/webgpuSelfTest.js +113 -0
  1594. package/dist/visualQa/webgpuSelfTest.js.map +1 -0
  1595. package/dist/visualQa/winChrome.d.ts +92 -0
  1596. package/dist/visualQa/winChrome.js +445 -0
  1597. package/dist/visualQa/winChrome.js.map +1 -0
  1598. package/dist/visualQa/worldWalk.d.ts +59 -0
  1599. package/dist/visualQa/worldWalk.js +523 -0
  1600. package/dist/visualQa/worldWalk.js.map +1 -0
  1601. package/dist/visualQa/worldWalkMath.d.ts +263 -0
  1602. package/dist/visualQa/worldWalkMath.js +873 -0
  1603. package/dist/visualQa/worldWalkMath.js.map +1 -0
  1604. package/dist/visualQa/worldWalkProbe.d.ts +1 -0
  1605. package/dist/visualQa/worldWalkProbe.js +206 -0
  1606. package/dist/visualQa/worldWalkProbe.js.map +1 -0
  1607. package/dist/visualsConfig.d.ts +65 -0
  1608. package/dist/visualsConfig.js +1333 -0
  1609. package/dist/visualsConfig.js.map +1 -0
  1610. package/dist/voiceCommand.d.ts +11 -0
  1611. package/dist/voiceCommand.js +101 -0
  1612. package/dist/voiceCommand.js.map +1 -0
  1613. package/dist/world/analyze.d.ts +51 -0
  1614. package/dist/world/analyze.js +767 -0
  1615. package/dist/world/analyze.js.map +1 -0
  1616. package/dist/world/baseline.d.ts +33 -0
  1617. package/dist/world/baseline.js +111 -0
  1618. package/dist/world/baseline.js.map +1 -0
  1619. package/dist/world/canonicalize.d.ts +7 -0
  1620. package/dist/world/canonicalize.js +110 -0
  1621. package/dist/world/canonicalize.js.map +1 -0
  1622. package/dist/world/diff.d.ts +18 -0
  1623. package/dist/world/diff.js +58 -0
  1624. package/dist/world/diff.js.map +1 -0
  1625. package/dist/world/focus.d.ts +11 -0
  1626. package/dist/world/focus.js +161 -0
  1627. package/dist/world/focus.js.map +1 -0
  1628. package/dist/world/format.d.ts +6 -0
  1629. package/dist/world/format.js +125 -0
  1630. package/dist/world/format.js.map +1 -0
  1631. package/dist/world/readWorldMetrics.d.ts +10 -0
  1632. package/dist/world/readWorldMetrics.js +31 -0
  1633. package/dist/world/readWorldMetrics.js.map +1 -0
  1634. package/dist/world/snapshotTypes.d.ts +59 -0
  1635. package/dist/world/snapshotTypes.js +8 -0
  1636. package/dist/world/snapshotTypes.js.map +1 -0
  1637. package/dist/world/snapshotWorld.d.ts +16 -0
  1638. package/dist/world/snapshotWorld.js +142 -0
  1639. package/dist/world/snapshotWorld.js.map +1 -0
  1640. package/dist/world/wiring.d.ts +21 -0
  1641. package/dist/world/wiring.js +73 -0
  1642. package/dist/world/wiring.js.map +1 -0
  1643. package/dist/world/zones.d.ts +23 -0
  1644. package/dist/world/zones.js +134 -0
  1645. package/dist/world/zones.js.map +1 -0
  1646. package/docs/bridge.md +304 -0
  1647. package/docs/device-hand-reach.md +44 -0
  1648. package/docs/scene-hlod.md +139 -0
  1649. package/docs/vehicle-audio-import.md +299 -0
  1650. package/docs/vehicle-simulate.md +165 -0
  1651. package/docs/visual-qa-candidate-versions.md +71 -0
  1652. package/docs/visual-qa.md +462 -0
  1653. package/package.json +69 -4
  1654. package/plugins/beamng-vehicle/README.md +129 -0
  1655. package/plugins/beamng-vehicle/bin/__pycache__/beamng_abs.cpython-312.pyc +0 -0
  1656. package/plugins/beamng-vehicle/bin/__pycache__/beamng_audio.cpython-312.pyc +0 -0
  1657. package/plugins/beamng-vehicle/bin/__pycache__/beamng_engine.cpython-312.pyc +0 -0
  1658. package/plugins/beamng-vehicle/bin/__pycache__/beamng_expression.cpython-312.pyc +0 -0
  1659. package/plugins/beamng-vehicle/bin/__pycache__/beamng_jbeam.cpython-312.pyc +0 -0
  1660. package/plugins/beamng-vehicle/bin/__pycache__/beamng_materials.cpython-312.pyc +0 -0
  1661. package/plugins/beamng-vehicle/bin/__pycache__/beamng_stock_events.cpython-312.pyc +0 -0
  1662. package/plugins/beamng-vehicle/bin/__pycache__/fmod_studio.cpython-312.pyc +0 -0
  1663. package/plugins/beamng-vehicle/bin/__pycache__/fsb5.cpython-312.pyc +0 -0
  1664. package/plugins/beamng-vehicle/bin/__pycache__/sim_audio.cpython-312.pyc +0 -0
  1665. package/plugins/beamng-vehicle/bin/__pycache__/sim_audio_ac.cpython-312.pyc +0 -0
  1666. package/plugins/beamng-vehicle/bin/__pycache__/sim_audio_beamng.cpython-312.pyc +0 -0
  1667. package/plugins/beamng-vehicle/bin/__pycache__/sim_audio_fixtures.cpython-312.pyc +0 -0
  1668. package/plugins/beamng-vehicle/bin/__pycache__/test_beamng_engine.cpython-312.pyc +0 -0
  1669. package/plugins/beamng-vehicle/bin/__pycache__/test_sim_audio.cpython-312.pyc +0 -0
  1670. package/plugins/beamng-vehicle/bin/beamng-vehicle.mjs +1295 -0
  1671. package/plugins/beamng-vehicle/bin/beamng_abs.py +408 -0
  1672. package/plugins/beamng-vehicle/bin/beamng_audio.py +394 -0
  1673. package/plugins/beamng-vehicle/bin/beamng_engine.py +184 -0
  1674. package/plugins/beamng-vehicle/bin/beamng_expression.py +373 -0
  1675. package/plugins/beamng-vehicle/bin/beamng_jbeam.py +858 -0
  1676. package/plugins/beamng-vehicle/bin/beamng_materials.py +261 -0
  1677. package/plugins/beamng-vehicle/bin/beamng_stock_events.py +171 -0
  1678. package/plugins/beamng-vehicle/bin/convert-beamng.py +1563 -0
  1679. package/plugins/beamng-vehicle/bin/fmod_studio.py +524 -0
  1680. package/plugins/beamng-vehicle/bin/fsb5.py +304 -0
  1681. package/plugins/beamng-vehicle/bin/index-beamng-common.mjs +16 -0
  1682. package/plugins/beamng-vehicle/bin/index-beamng.py +69 -0
  1683. package/plugins/beamng-vehicle/bin/lower-beamng.py +2399 -0
  1684. package/plugins/beamng-vehicle/bin/sim_audio.py +250 -0
  1685. package/plugins/beamng-vehicle/bin/sim_audio_ac.py +378 -0
  1686. package/plugins/beamng-vehicle/bin/sim_audio_beamng.py +878 -0
  1687. package/plugins/beamng-vehicle/bin/sim_audio_fixtures.py +287 -0
  1688. package/plugins/beamng-vehicle/bin/sim_audio_import.py +135 -0
  1689. package/plugins/beamng-vehicle/bin/test_beamng_engine.py +124 -0
  1690. package/plugins/beamng-vehicle/bin/test_beamng_jbeam.py +383 -0
  1691. package/plugins/beamng-vehicle/bin/test_beamng_precedence.py +134 -0
  1692. package/plugins/beamng-vehicle/bin/test_sim_audio.py +249 -0
  1693. package/plugins/beamng-vehicle/bridge-plugin.json +55 -0
  1694. package/plugins/beamng-vehicle/controller-adapters/beamng-0.39.4-abs.json +52 -0
  1695. package/plugins/beamng-vehicle/lib/common-dependency.mjs +357 -0
  1696. package/plugins/beamng-vehicle/lib/dae-scan.mjs +40 -0
  1697. package/plugins/beamng-vehicle/lib/file-identity.mjs +46 -0
  1698. package/plugins/beamng-vehicle/lib/material-semantics.mjs +312 -0
  1699. package/plugins/beamng-vehicle/lib/palette-contract.mjs +6 -0
  1700. package/plugins/beamng-vehicle/lib/vehicle-qa.mjs +567 -0
  1701. package/plugins/beamng-vehicle/lib/vehicle-source.mjs +247 -0
  1702. package/plugins/beamng-vehicle/profiles/source-compatibility.json +14 -0
  1703. package/plugins/beamng-vehicle/vendor/vehicle-package-v2.mjs +6451 -0
  1704. package/vendor/README.md +63 -0
  1705. package/vendor/ability-manifest.mjs +527 -6
  1706. package/vendor/audits/asset-credits.mjs +96 -0
  1707. package/vendor/audits/check-loaders.mjs +80 -0
  1708. package/vendor/audits/perf-gate.mjs +759 -0
  1709. package/vendor/audits/prove-live.mjs +307 -0
  1710. package/vendor/audits/source-audit.mjs +530 -0
  1711. package/vendor/audits/world-audit.mjs +439 -0
  1712. package/vendor/capture-body.glb +0 -0
  1713. package/vendor/capture-face.glb +0 -0
  1714. package/vendor/installed-index.mjs +1 -1
  1715. package/vendor/vehicle-package-v2.mjs +6451 -0
package/dist/lib.js CHANGED
@@ -34,11 +34,62 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  return result;
35
35
  };
36
36
  })();
37
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
38
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
39
+ };
37
40
  Object.defineProperty(exports, "__esModule", { value: true });
38
- exports.TOOLCHAIN_PACKAGES = exports.initAbilityTemplate = exports.initTemplate = exports.defaultClientTokenName = exports.browserLogin = exports.jwtExpiresAtIso = exports.clearCredentials = exports.saveCredentials = exports.loadCredentials = exports.HELIX_SCOPE = exports.HELIX_ENV = exports.DEFAULT_WEB_URL = exports.DEFAULT_API_URL = exports.credsEnvMismatchWarning = exports.apiUrlMatchesEnv = exports.MODULES_DIR = exports.LOCKFILE = exports.INSTALLED_INDEX = exports.installWorld = exports.resolvePins = exports.normalizePinRange = exports.loadInstalledIndexValidator = exports.loadVendoredValidator = exports.installLocalAbility = exports.checkAbilityBundle = exports.checkPackageBundle = exports.MULTIPLAYER_CONFIG_FILENAME = exports.multiplayerConfigBundleFile = exports.checkBundle = exports.uploadToTicket = exports.HelixApi = exports.ApiError = void 0;
41
+ exports.compileSceneElements = exports.cs2 = exports.terrain = exports.labelModuleValidationErrors = exports.updateInteractable = exports.subtractInteractableContribution = exports.parseInteractablePosition = exports.namespaceInteractableFragment = exports.moduleInteractableFragment = exports.instanceOrdinalOf = exports.interactableModuleId = exports.composeInteractableManifest = exports.composeInteractableModuleManifest = exports.addInteractable = exports.frozenBuildArtifactKey = exports.freezeBuildDraft = exports.createPrivateBuildDraft = exports.PRIVATE_BUILD_DRAFT_SCHEMA = exports.checkPackageBundle = exports.MULTIPLAYER_CONFIG_FILENAME = exports.multiplayerConfigBundleFile = exports.PLATFORM_THREE_VERSION = exports.tiledTerrainBakedLightingWarning = exports.checkBundle = exports.validateDeviceProject = exports.testDeviceProject = exports.readDeviceGlbNodeNames = exports.createDeviceProject = exports.DEVICE_FILENAME = exports.placementsContinuum = exports.placementsBundle = exports.inspectPlacementsBake = exports.readPlacementsBake = exports.attachTreeImpostors = exports.bakeTreeImpostors = exports.bakePlacements = exports.publicRequester = exports.formatPublishedVerdict = exports.formatHostAddOns = exports.checkPublishedAddOn = exports.checkHostAddOns = exports.uploadToTicket = exports.HelixApi = exports.ApiError = exports.PLACEMENT_REQUEST_FILENAME = exports.writePlacementRequest = exports.placementRequestBundleFile = exports.validatePlacementRequest = exports.createPlacementRequest = exports.WORLD_THUMBNAIL_PUBLICATION_VERSION = void 0;
42
+ exports.buildItemDistribution = exports.ITEM_EDITION_MODES = exports.ITEM_DISTRIBUTION_CHANNELS = exports.DISTRIBUTION_KEY_PATTERN = exports.renderCcSlotTable = exports.renderCcGenderList = exports.parseTags = exports.parseGenders = exports.parseJsonOrFile = exports.parseJsonObjectOrFile = exports.parseJsonArrayOrFile = exports.normalizeItemKind = exports.meshContentTypeFromExtension = exports.CLIP_SET_SLOT_TYPES = exports.isCcWearableSlot = exports.isCcGender = exports.ccSlotIsRequiredForKind = exports.ccSlotIsAllowedForKind = exports.ccGendersAreRequiredForKind = exports.ccGendersAreAllowedForKind = exports.CC_WEARABLE_SLOT_GROUPS = exports.CC_WEARABLE_SLOTS = exports.CC_GENDERS = exports.assertLooksLikeGlb = exports.assertCcSlot = exports.assertCcGenders = exports.SOURCE_MAX_BYTES = exports.SOURCE_HARD_EXCLUDES = exports.SOURCE_CONTENT_TYPE = exports.SOURCE_ARCHIVE_FILENAME = exports.parseGitignore = exports.isSourceExcluded = exports.formatArchiveSize = exports.createSourceArchive = exports.collectSourceFiles = exports.formatScenePerformanceReport = exports.analyzeScenePerformance = exports.importSourceSceneMap = exports.SOURCE_SCENE_IMPORT_BUDGETS = exports.NATIVE_SCENE_CONVERSION_CONFIDENCE = exports.matchCanonicalMaterial = exports.createSharedMaterialBinding = exports.buildMaterialPackageRecipe = exports.buildMaterialBulkRecipe = exports.MATERIAL_REVIEW_CONFIDENCE = exports.MATERIAL_AUTO_REPLACE_CONFIDENCE = exports.HELIX_OFFICIAL_MATERIAL_SUBSET = exports.compileContinuumScenePackage = exports.CONTINUUM_SCENE_DOCUMENT_MEDIA_TYPE = exports.compileSceneElementsBundle = void 0;
43
+ exports.assessThreeCurrency = exports.assessPlatformDelivery = exports.assessInteractables = exports.enginePinOverrideLogPath = exports.detectExactEnginePins = exports.ALLOW_EXACT_ENGINE_PIN_FLAG = exports.WORLD_MANIFEST_LOCATIONS = exports.MODULES_DIR = exports.LOCKFILE = exports.INSTALLED_INDEX = exports.installWorld = exports.resolvePins = exports.validateAssetPackConstraints = exports.normalizePinRange = exports.loadInstalledIndexValidator = exports.loadVendoredValidator = exports.installLocalAbility = exports.checkAbilityBundle = exports.productTypeGrantsItem = exports.isProductKey = exports.buildProductUpdate = exports.buildProductRegistration = exports.WORLD_PRODUCT_TYPES = exports.PRODUCT_TITLE_MAX = exports.PRODUCT_KEY_PATTERN = exports.PRODUCT_KEY_MAX = exports.PRODUCT_DESCRIPTION_MAX = exports.MAX_PASS_DURATION_SECONDS = exports.MAX_GRANT_ITEM_QUANTITY = exports.MAX_GRANT_EFFECTS = exports.MAX_GRANT_CURRENCY_AMOUNT = exports.GRANT_CODE_PATTERN = exports.GRANT_CODE_MAX = exports.resolveUnlockMode = exports.isAchievementKey = exports.iconContentTypeFromExtension = exports.formatAchievementCriteria = exports.buildAchievementUpdate = exports.buildAchievementRegistration = exports.buildAchievementCriteria = exports.DATA_STORE_CRITERIA_KEY_TEMPLATES = exports.ACHIEVEMENT_UNLOCK_MODES = exports.ACHIEVEMENT_TROPHY_MAX_BYTES = exports.ACHIEVEMENT_KEY_PATTERN = exports.ACHIEVEMENT_ICON_MAX_BYTES = exports.ACHIEVEMENT_CRITERIA_SIGNALS = exports.ACHIEVEMENT_CRITERIA_OPS = exports.ACHIEVEMENT_CRITERIA_METRICS = exports.editionFields = exports.buildItemDistributionUpdate = void 0;
44
+ exports.getVaultAsset = exports.getStandaloneAssetGenerationJob = exports.getDreamerAssetGenerationJob = exports.generateStandaloneAsset = exports.generateImage = exports.generateAudio = exports.generateAndPublishAssetFromReference = exports.generateAndPublishAsset = exports.formatStrandedJob = exports.extensionFor = exports.describeGateAdvance = exports.approveDreamerGate = exports.DEFAULT_MOUNT_PREFIX = exports.formatSubPathResult = exports.verifySubPath = exports.roundLix = exports.receiptLix = exports.formatWaitState = exports.formatReceipt = exports.formatLix = exports.formatQuote = exports.formatBalance = exports.normalizeQuote = exports.quoteGeneration = exports.formatJobs = exports.listJobs = exports.getLixBalance = exports.TICK_NODE_CEILING = exports.renderRealizabilityRefusal = exports.registryRealizabilityDeps = exports.checkRealizability = exports.initAbilityTemplate = exports.slugify = exports.initTemplate = exports.defaultClientTokenName = exports.browserLogin = exports.jwtExpiresAtIso = exports.clearCredentials = exports.saveCredentials = exports.loadCredentials = exports.HELIX_SCOPE = exports.HELIX_ENV = exports.DEFAULT_WEB_URL = exports.DEFAULT_API_URL = exports.credsEnvMismatchWarning = exports.apiUrlMatchesEnv = exports.ADVISORY_SYSTEMS = exports.assessWorldCurrency = exports.assessWeaponPins = exports.assessVaultAssets = void 0;
45
+ exports.formatWorldInspection = exports.sortFindings = exports.analyzeWorld = exports.validateUnrealProject = exports.packageUnrealProject = exports.initUnrealManifest = exports.HELIX_UNREAL_ENGINE_VERSION = exports.HELIX_UNREAL_CONTRACT_VERSION = exports.formatUnrealValidationReport = exports.uploadArtifact = exports.resolveWorldId = exports.renderPublishFailure = exports.publishUnrealBuild = exports.assertReceipt = exports.assertCreateResponseMatchesPlan = exports.assertClientDeliveryMatchesPlan = exports.verifyUnrealCandidate = exports.UnrealCandidateError = exports.planSharedRuntimePublish = exports.defaultIdempotencyKey = exports.candidateArtifactDigest = exports.auditCookScope = exports.clearMaterialPinCache = exports.platformMaterialTag = exports.parseVaultMaterialSearch = exports.parseContinuumCurrentVersion = exports.materialContinuumIdentity = exports.matchMaterialResolution = exports.materialResolutionOptions = exports.materialDefaultResolutionKey = exports.DEFAULT_RESOLUTION_KEY = exports.VAULT_ASSET_KINDS = exports.UnavailableCapabilityError = exports.updateVaultAssetMetadata = exports.startStandaloneAssetGeneration = exports.startDreamerAssetGenerationFromReference = exports.startDreamerAssetGeneration = exports.searchVaultAssets = exports.StrandedJobError = exports.saveGeneratedAsset = exports.reviseDreamerGate = exports.retryDreamerJob = exports.resumeAndPublishAsset = exports.resolveMaterial = exports.MATERIAL_RENDITION_SELECTIONS = exports.listMaterials = exports.listDreamerVoices = exports.installVaultAsset = exports.getVaultAssetVersions = exports.getVaultAssetUsage = void 0;
46
+ exports.bakeSharedHlodAtlas = exports.planSharedHlodAtlas = exports.approximateHlodGeometry = exports.bakeHlodSurface = exports.HLOD_BAKER_VERSION = exports.DEFAULT_HLOD_LAYER = exports.planSceneHlod = exports.tagSceneHlod = exports.inspectSceneHlod = exports.bakeSceneHlod = exports.attachFoliageLods = exports.bakeFoliageLods = exports.MAX_ITEM_THUMBNAIL_BYTES = exports.renderItemThumbnailResult = exports.describeThumbnailError = exports.setItemThumbnail = exports.refreshItemThumbnail = exports.DOCTOR_REPORT_SCHEMA = exports.findUProject = exports.locateEditorCmd = exports.runUnrealDoctor = exports.TOOLCHAIN_PACKAGES = exports.productsWorldPath = exports.CREATOR_WORLDS_PATH = exports.PRODUCTS_PATH = exports.ITEM_DISTRIBUTIONS_CREATOR_PATH = exports.ITEM_DISTRIBUTIONS_PATH = exports.achievementsWorldPath = exports.ITEMS_FROM_PACKAGE_PATH = exports.PUBLICATIONS_UPLOAD_PATH = exports.publishOwnedItemFromPackage = exports.makeItemFromPackage = exports.publishGlb = exports.SERVER_CREATION_PERMISSIONS = exports.WORLD_DESCRIPTION_MAX = exports.WORLD_METRICS_UNSUPPORTED = exports.BASELINE_FILENAME = exports.anchorOf = exports.parseBaseline = exports.buildBaseline = exports.applyBaseline = exports.canonicalizeSnapshot = exports.detectNpcWiring = exports.detectInspectWiring = exports.resolveFocus = exports.formatWorldFocus = exports.analyzeZones = exports.formatWorldDiff = exports.diffWorldSnapshots = exports.DEFAULT_REPORT = void 0;
47
+ exports.DEFAULT_HLOD_REFINEMENT_SETTINGS = exports.bakeSceneHlodRefinements = exports.DEFAULT_COMPLETE_HLOD_SETTINGS = exports.bakeCompleteSceneHlod = exports.writeSharedHlodMaterialGlb = exports.writeHlodCellGlb = void 0;
39
48
  exports.importCharacter = importCharacter;
49
+ exports.captureScreenshots = captureScreenshots;
50
+ exports.encodeImagePreview = encodeImagePreview;
51
+ exports.inspectGesture = inspectGesture;
52
+ exports.formatGestureInspection = formatGestureInspection;
53
+ exports.captureGesture = captureGesture;
54
+ exports.snapshotWorld = snapshotWorld;
55
+ exports.inspectNpc = inspectNpc;
56
+ exports.formatNpcInspection = formatNpcInspection;
57
+ exports.captureNpc = captureNpc;
58
+ exports.readWorldMetrics = readWorldMetrics;
59
+ exports.renderWorldMetricsText = renderWorldMetricsText;
60
+ exports.readAxisTable = readAxisTable;
40
61
  exports.publishWorld = publishWorld;
62
+ exports.createWorld = createWorld;
63
+ exports.uploadWorldSource = uploadWorldSource;
64
+ exports.describeSourceFailure = describeSourceFailure;
65
+ exports.editSiteHost = editSiteHost;
66
+ exports.sourceOutcomeLine = sourceOutcomeLine;
67
+ exports.mediaContentTypeFromExtension = mediaContentTypeFromExtension;
68
+ exports.findBundleThumbnail = findBundleThumbnail;
69
+ exports.assertMediaSizeOk = assertMediaSizeOk;
70
+ exports.assertMediaSlotWritable = assertMediaSlotWritable;
71
+ exports.setWorldMedia = setWorldMedia;
72
+ exports.clearWorldMedia = clearWorldMedia;
73
+ exports.delistItem = delistItem;
74
+ exports.planAchievementRegistration = planAchievementRegistration;
75
+ exports.registerAchievement = registerAchievement;
76
+ exports.listAchievements = listAchievements;
77
+ exports.updateAchievement = updateAchievement;
78
+ exports.setAchievementIcon = setAchievementIcon;
79
+ exports.isClaimRoute = isClaimRoute;
80
+ exports.distributionCreatedHeadline = distributionCreatedHeadline;
81
+ exports.createItemDistribution = createItemDistribution;
82
+ exports.listItemDistributions = listItemDistributions;
83
+ exports.updateItemDistribution = updateItemDistribution;
84
+ exports.disableItemDistribution = disableItemDistribution;
85
+ exports.planProductRegistration = planProductRegistration;
86
+ exports.registerProduct = registerProduct;
87
+ exports.listProducts = listProducts;
88
+ exports.listProductWorlds = listProductWorlds;
89
+ exports.updateProduct = updateProduct;
90
+ exports.setProductActive = setProductActive;
41
91
  exports.publishPackage = publishPackage;
92
+ exports.publishInteractable = publishInteractable;
42
93
  exports.listPackages = listPackages;
43
94
  exports.getPackageManifest = getPackageManifest;
44
95
  exports.authStatus = authStatus;
@@ -51,23 +102,214 @@ exports.cliVersion = cliVersion;
51
102
  exports.latestOnNpm = latestOnNpm;
52
103
  exports.installHint = installHint;
53
104
  exports.checkForUpdates = checkForUpdates;
105
+ const helix_manifest_1 = require("@hypersoniclabs/helix-manifest");
106
+ const publishThumbnail_1 = require("./screenshot/publishThumbnail");
107
+ var publishThumbnail_2 = require("./screenshot/publishThumbnail");
108
+ Object.defineProperty(exports, "WORLD_THUMBNAIL_PUBLICATION_VERSION", { enumerable: true, get: function () { return publishThumbnail_2.WORLD_THUMBNAIL_PUBLICATION_VERSION; } });
54
109
  const node_fs_1 = require("node:fs");
110
+ const node_crypto_1 = require("node:crypto");
111
+ const node_os_1 = require("node:os");
55
112
  const node_path_1 = require("node:path");
56
113
  const api_1 = require("./api");
114
+ const placementRequest_1 = require("./placementRequest");
115
+ var placementRequest_2 = require("./placementRequest");
116
+ Object.defineProperty(exports, "createPlacementRequest", { enumerable: true, get: function () { return placementRequest_2.createPlacementRequest; } });
117
+ Object.defineProperty(exports, "validatePlacementRequest", { enumerable: true, get: function () { return placementRequest_2.validatePlacementRequest; } });
118
+ Object.defineProperty(exports, "placementRequestBundleFile", { enumerable: true, get: function () { return placementRequest_2.placementRequestBundleFile; } });
119
+ Object.defineProperty(exports, "writePlacementRequest", { enumerable: true, get: function () { return placementRequest_2.writePlacementRequest; } });
120
+ Object.defineProperty(exports, "PLACEMENT_REQUEST_FILENAME", { enumerable: true, get: function () { return placementRequest_2.PLACEMENT_REQUEST_FILENAME; } });
57
121
  const bundle_1 = require("./bundle");
58
122
  const package_1 = require("./package");
123
+ /**
124
+ * The item kinds this process can judge before the upload.
125
+ *
126
+ * A kind absent here is not unchecked — the server checks every kind. It is
127
+ * only unchecked EARLY, which costs a round trip. Adding a kind here means
128
+ * mirroring its server ceilings in `avatarPreflight.ts`, and a mirror that
129
+ * guesses LOOSER numbers than the server is worse than no mirror at all: it
130
+ * prints confident green for a file that will be refused.
131
+ */
132
+ const PREFLIGHT_KINDS = new Set([
133
+ 'avatar',
134
+ 'wearable',
135
+ 'add_on',
136
+ 'home_item',
137
+ 'vehicle',
138
+ 'weapon',
139
+ ]);
59
140
  const ability_1 = require("./ability");
141
+ const item_1 = require("./item");
142
+ const achievement_1 = require("./achievement");
143
+ const product_1 = require("./product");
144
+ const distribution_1 = require("./distribution");
60
145
  const config_1 = require("./config");
146
+ const realizability_1 = require("./realizability");
147
+ const browserLogin_1 = require("./browserLogin");
148
+ const enginePins_1 = require("./enginePins");
149
+ const source_archive_1 = require("./source-archive");
61
150
  var api_2 = require("./api");
62
151
  Object.defineProperty(exports, "ApiError", { enumerable: true, get: function () { return api_2.ApiError; } });
63
152
  Object.defineProperty(exports, "HelixApi", { enumerable: true, get: function () { return api_2.HelixApi; } });
64
153
  Object.defineProperty(exports, "uploadToTicket", { enumerable: true, get: function () { return api_2.uploadToTicket; } });
154
+ var addonPublished_1 = require("./vehicle/addonPublished");
155
+ Object.defineProperty(exports, "checkHostAddOns", { enumerable: true, get: function () { return addonPublished_1.checkHostAddOns; } });
156
+ Object.defineProperty(exports, "checkPublishedAddOn", { enumerable: true, get: function () { return addonPublished_1.checkPublishedAddOn; } });
157
+ Object.defineProperty(exports, "formatHostAddOns", { enumerable: true, get: function () { return addonPublished_1.formatHostAddOns; } });
158
+ Object.defineProperty(exports, "formatPublishedVerdict", { enumerable: true, get: function () { return addonPublished_1.formatPublishedVerdict; } });
159
+ Object.defineProperty(exports, "publicRequester", { enumerable: true, get: function () { return addonPublished_1.publicRequester; } });
160
+ var bake_1 = require("./placements/bake");
161
+ Object.defineProperty(exports, "bakePlacements", { enumerable: true, get: function () { return bake_1.bakePlacements; } });
162
+ var impostors_1 = require("./placements/impostors");
163
+ Object.defineProperty(exports, "bakeTreeImpostors", { enumerable: true, get: function () { return impostors_1.bakeTreeImpostors; } });
164
+ var attachImpostors_1 = require("./placements/attachImpostors");
165
+ Object.defineProperty(exports, "attachTreeImpostors", { enumerable: true, get: function () { return attachImpostors_1.attachTreeImpostors; } });
166
+ var source_1 = require("./placements/source");
167
+ Object.defineProperty(exports, "readPlacementsBake", { enumerable: true, get: function () { return source_1.readPlacementsBake; } });
168
+ Object.defineProperty(exports, "inspectPlacementsBake", { enumerable: true, get: function () { return source_1.inspectPlacementsBake; } });
169
+ Object.defineProperty(exports, "placementsBundle", { enumerable: true, get: function () { return source_1.placementsBundle; } });
170
+ Object.defineProperty(exports, "placementsContinuum", { enumerable: true, get: function () { return source_1.placementsContinuum; } });
171
+ var device_1 = require("./device");
172
+ Object.defineProperty(exports, "DEVICE_FILENAME", { enumerable: true, get: function () { return device_1.DEVICE_FILENAME; } });
173
+ Object.defineProperty(exports, "createDeviceProject", { enumerable: true, get: function () { return device_1.createDeviceProject; } });
174
+ Object.defineProperty(exports, "readDeviceGlbNodeNames", { enumerable: true, get: function () { return device_1.readDeviceGlbNodeNames; } });
175
+ Object.defineProperty(exports, "testDeviceProject", { enumerable: true, get: function () { return device_1.testDeviceProject; } });
176
+ Object.defineProperty(exports, "validateDeviceProject", { enumerable: true, get: function () { return device_1.validateDeviceProject; } });
65
177
  var bundle_2 = require("./bundle");
66
178
  Object.defineProperty(exports, "checkBundle", { enumerable: true, get: function () { return bundle_2.checkBundle; } });
179
+ Object.defineProperty(exports, "tiledTerrainBakedLightingWarning", { enumerable: true, get: function () { return bundle_2.tiledTerrainBakedLightingWarning; } });
180
+ Object.defineProperty(exports, "PLATFORM_THREE_VERSION", { enumerable: true, get: function () { return bundle_2.PLATFORM_THREE_VERSION; } });
67
181
  Object.defineProperty(exports, "multiplayerConfigBundleFile", { enumerable: true, get: function () { return bundle_2.multiplayerConfigBundleFile; } });
68
182
  Object.defineProperty(exports, "MULTIPLAYER_CONFIG_FILENAME", { enumerable: true, get: function () { return bundle_2.MULTIPLAYER_CONFIG_FILENAME; } });
69
183
  var package_2 = require("./package");
70
184
  Object.defineProperty(exports, "checkPackageBundle", { enumerable: true, get: function () { return package_2.checkPackageBundle; } });
185
+ var builds_1 = require("./builds");
186
+ Object.defineProperty(exports, "PRIVATE_BUILD_DRAFT_SCHEMA", { enumerable: true, get: function () { return builds_1.PRIVATE_BUILD_DRAFT_SCHEMA; } });
187
+ Object.defineProperty(exports, "createPrivateBuildDraft", { enumerable: true, get: function () { return builds_1.createPrivateBuildDraft; } });
188
+ Object.defineProperty(exports, "freezeBuildDraft", { enumerable: true, get: function () { return builds_1.freezeBuildDraft; } });
189
+ Object.defineProperty(exports, "frozenBuildArtifactKey", { enumerable: true, get: function () { return builds_1.frozenBuildArtifactKey; } });
190
+ var interactable_1 = require("./interactable");
191
+ Object.defineProperty(exports, "addInteractable", { enumerable: true, get: function () { return interactable_1.addInteractable; } });
192
+ Object.defineProperty(exports, "composeInteractableModuleManifest", { enumerable: true, get: function () { return interactable_1.composeInteractableModuleManifest; } });
193
+ Object.defineProperty(exports, "composeInteractableManifest", { enumerable: true, get: function () { return interactable_1.composeInteractableManifest; } });
194
+ Object.defineProperty(exports, "interactableModuleId", { enumerable: true, get: function () { return interactable_1.interactableModuleId; } });
195
+ Object.defineProperty(exports, "instanceOrdinalOf", { enumerable: true, get: function () { return interactable_1.instanceOrdinalOf; } });
196
+ Object.defineProperty(exports, "moduleInteractableFragment", { enumerable: true, get: function () { return interactable_1.moduleInteractableFragment; } });
197
+ Object.defineProperty(exports, "namespaceInteractableFragment", { enumerable: true, get: function () { return interactable_1.namespaceInteractableFragment; } });
198
+ Object.defineProperty(exports, "parseInteractablePosition", { enumerable: true, get: function () { return interactable_1.parseInteractablePosition; } });
199
+ Object.defineProperty(exports, "subtractInteractableContribution", { enumerable: true, get: function () { return interactable_1.subtractInteractableContribution; } });
200
+ Object.defineProperty(exports, "updateInteractable", { enumerable: true, get: function () { return interactable_1.updateInteractable; } });
201
+ var module_validation_1 = require("./module-validation");
202
+ Object.defineProperty(exports, "labelModuleValidationErrors", { enumerable: true, get: function () { return module_validation_1.labelModuleValidationErrors; } });
203
+ // Namespaced: the terrain authoring library shares plain names (`generate`, `import`, `bake`) with the rest of this surface.
204
+ exports.terrain = __importStar(require("./terrain/index"));
205
+ // Namespaced for the same reason: the CS2 bundle readers and their converters carry plain names of their own.
206
+ exports.cs2 = __importStar(require("./cs2/index"));
207
+ var compiler_1 = require("./sceneElements/compiler");
208
+ Object.defineProperty(exports, "compileSceneElements", { enumerable: true, get: function () { return compiler_1.compileSceneElements; } });
209
+ Object.defineProperty(exports, "compileSceneElementsBundle", { enumerable: true, get: function () { return compiler_1.compileSceneElementsBundle; } });
210
+ var continuum_1 = require("./sceneElements/continuum");
211
+ Object.defineProperty(exports, "CONTINUUM_SCENE_DOCUMENT_MEDIA_TYPE", { enumerable: true, get: function () { return continuum_1.CONTINUUM_SCENE_DOCUMENT_MEDIA_TYPE; } });
212
+ Object.defineProperty(exports, "compileContinuumScenePackage", { enumerable: true, get: function () { return continuum_1.compileContinuumScenePackage; } });
213
+ var materials_1 = require("./sceneImport/materials");
214
+ Object.defineProperty(exports, "HELIX_OFFICIAL_MATERIAL_SUBSET", { enumerable: true, get: function () { return materials_1.HELIX_OFFICIAL_MATERIAL_SUBSET; } });
215
+ Object.defineProperty(exports, "MATERIAL_AUTO_REPLACE_CONFIDENCE", { enumerable: true, get: function () { return materials_1.MATERIAL_AUTO_REPLACE_CONFIDENCE; } });
216
+ Object.defineProperty(exports, "MATERIAL_REVIEW_CONFIDENCE", { enumerable: true, get: function () { return materials_1.MATERIAL_REVIEW_CONFIDENCE; } });
217
+ Object.defineProperty(exports, "buildMaterialBulkRecipe", { enumerable: true, get: function () { return materials_1.buildMaterialBulkRecipe; } });
218
+ Object.defineProperty(exports, "buildMaterialPackageRecipe", { enumerable: true, get: function () { return materials_1.buildMaterialPackageRecipe; } });
219
+ Object.defineProperty(exports, "createSharedMaterialBinding", { enumerable: true, get: function () { return materials_1.createSharedMaterialBinding; } });
220
+ Object.defineProperty(exports, "matchCanonicalMaterial", { enumerable: true, get: function () { return materials_1.matchCanonicalMaterial; } });
221
+ var semantic_1 = require("./sceneImport/semantic");
222
+ Object.defineProperty(exports, "NATIVE_SCENE_CONVERSION_CONFIDENCE", { enumerable: true, get: function () { return semantic_1.NATIVE_SCENE_CONVERSION_CONFIDENCE; } });
223
+ Object.defineProperty(exports, "SOURCE_SCENE_IMPORT_BUDGETS", { enumerable: true, get: function () { return semantic_1.SOURCE_SCENE_IMPORT_BUDGETS; } });
224
+ Object.defineProperty(exports, "importSourceSceneMap", { enumerable: true, get: function () { return semantic_1.importSourceSceneMap; } });
225
+ __exportStar(require("./continuum"), exports);
226
+ __exportStar(require("./canary"), exports);
227
+ var scenePerformance_1 = require("./scenePerformance");
228
+ Object.defineProperty(exports, "analyzeScenePerformance", { enumerable: true, get: function () { return scenePerformance_1.analyzeScenePerformance; } });
229
+ Object.defineProperty(exports, "formatScenePerformanceReport", { enumerable: true, get: function () { return scenePerformance_1.formatScenePerformanceReport; } });
230
+ // The opt-in source archive (CH-1457 §9). Exported so the MCP server and any
231
+ // other in-process caller build the archive through the same selection policy
232
+ // the CLI uses — a second implementation is a second exclude list.
233
+ var source_archive_2 = require("./source-archive");
234
+ Object.defineProperty(exports, "collectSourceFiles", { enumerable: true, get: function () { return source_archive_2.collectSourceFiles; } });
235
+ Object.defineProperty(exports, "createSourceArchive", { enumerable: true, get: function () { return source_archive_2.createSourceArchive; } });
236
+ Object.defineProperty(exports, "formatArchiveSize", { enumerable: true, get: function () { return source_archive_2.formatArchiveSize; } });
237
+ Object.defineProperty(exports, "isSourceExcluded", { enumerable: true, get: function () { return source_archive_2.isSourceExcluded; } });
238
+ Object.defineProperty(exports, "parseGitignore", { enumerable: true, get: function () { return source_archive_2.parseGitignore; } });
239
+ Object.defineProperty(exports, "SOURCE_ARCHIVE_FILENAME", { enumerable: true, get: function () { return source_archive_2.SOURCE_ARCHIVE_FILENAME; } });
240
+ Object.defineProperty(exports, "SOURCE_CONTENT_TYPE", { enumerable: true, get: function () { return source_archive_2.SOURCE_CONTENT_TYPE; } });
241
+ Object.defineProperty(exports, "SOURCE_HARD_EXCLUDES", { enumerable: true, get: function () { return source_archive_2.SOURCE_HARD_EXCLUDES; } });
242
+ Object.defineProperty(exports, "SOURCE_MAX_BYTES", { enumerable: true, get: function () { return source_archive_2.SOURCE_MAX_BYTES; } });
243
+ // Existing Item reads and validation. MCP imports this library directly;
244
+ // new Item creation uses the sealed-Package publication exports above.
245
+ var item_2 = require("./item");
246
+ Object.defineProperty(exports, "assertCcGenders", { enumerable: true, get: function () { return item_2.assertCcGenders; } });
247
+ Object.defineProperty(exports, "assertCcSlot", { enumerable: true, get: function () { return item_2.assertCcSlot; } });
248
+ Object.defineProperty(exports, "assertLooksLikeGlb", { enumerable: true, get: function () { return item_2.assertLooksLikeGlb; } });
249
+ Object.defineProperty(exports, "CC_GENDERS", { enumerable: true, get: function () { return item_2.CC_GENDERS; } });
250
+ Object.defineProperty(exports, "CC_WEARABLE_SLOTS", { enumerable: true, get: function () { return item_2.CC_WEARABLE_SLOTS; } });
251
+ Object.defineProperty(exports, "CC_WEARABLE_SLOT_GROUPS", { enumerable: true, get: function () { return item_2.CC_WEARABLE_SLOT_GROUPS; } });
252
+ Object.defineProperty(exports, "ccGendersAreAllowedForKind", { enumerable: true, get: function () { return item_2.ccGendersAreAllowedForKind; } });
253
+ Object.defineProperty(exports, "ccGendersAreRequiredForKind", { enumerable: true, get: function () { return item_2.ccGendersAreRequiredForKind; } });
254
+ Object.defineProperty(exports, "ccSlotIsAllowedForKind", { enumerable: true, get: function () { return item_2.ccSlotIsAllowedForKind; } });
255
+ Object.defineProperty(exports, "ccSlotIsRequiredForKind", { enumerable: true, get: function () { return item_2.ccSlotIsRequiredForKind; } });
256
+ Object.defineProperty(exports, "isCcGender", { enumerable: true, get: function () { return item_2.isCcGender; } });
257
+ Object.defineProperty(exports, "isCcWearableSlot", { enumerable: true, get: function () { return item_2.isCcWearableSlot; } });
258
+ Object.defineProperty(exports, "CLIP_SET_SLOT_TYPES", { enumerable: true, get: function () { return item_2.CLIP_SET_SLOT_TYPES; } });
259
+ Object.defineProperty(exports, "meshContentTypeFromExtension", { enumerable: true, get: function () { return item_2.meshContentTypeFromExtension; } });
260
+ Object.defineProperty(exports, "normalizeItemKind", { enumerable: true, get: function () { return item_2.normalizeItemKind; } });
261
+ Object.defineProperty(exports, "parseJsonArrayOrFile", { enumerable: true, get: function () { return item_2.parseJsonArrayOrFile; } });
262
+ Object.defineProperty(exports, "parseJsonObjectOrFile", { enumerable: true, get: function () { return item_2.parseJsonObjectOrFile; } });
263
+ Object.defineProperty(exports, "parseJsonOrFile", { enumerable: true, get: function () { return item_2.parseJsonOrFile; } });
264
+ Object.defineProperty(exports, "parseGenders", { enumerable: true, get: function () { return item_2.parseGenders; } });
265
+ Object.defineProperty(exports, "parseTags", { enumerable: true, get: function () { return item_2.parseTags; } });
266
+ Object.defineProperty(exports, "renderCcGenderList", { enumerable: true, get: function () { return item_2.renderCcGenderList; } });
267
+ Object.defineProperty(exports, "renderCcSlotTable", { enumerable: true, get: function () { return item_2.renderCcSlotTable; } });
268
+ var distribution_2 = require("./distribution");
269
+ Object.defineProperty(exports, "DISTRIBUTION_KEY_PATTERN", { enumerable: true, get: function () { return distribution_2.DISTRIBUTION_KEY_PATTERN; } });
270
+ Object.defineProperty(exports, "ITEM_DISTRIBUTION_CHANNELS", { enumerable: true, get: function () { return distribution_2.ITEM_DISTRIBUTION_CHANNELS; } });
271
+ Object.defineProperty(exports, "ITEM_EDITION_MODES", { enumerable: true, get: function () { return distribution_2.ITEM_EDITION_MODES; } });
272
+ Object.defineProperty(exports, "buildItemDistribution", { enumerable: true, get: function () { return distribution_2.buildItemDistribution; } });
273
+ Object.defineProperty(exports, "buildItemDistributionUpdate", { enumerable: true, get: function () { return distribution_2.buildItemDistributionUpdate; } });
274
+ Object.defineProperty(exports, "editionFields", { enumerable: true, get: function () { return distribution_2.editionFields; } });
275
+ // Achievements. Same rule as the item exports above: the MCP server reaches the
276
+ // registration surface ONLY through these, so an un-exported helper is
277
+ // unreachable to an agent.
278
+ var achievement_2 = require("./achievement");
279
+ Object.defineProperty(exports, "ACHIEVEMENT_CRITERIA_METRICS", { enumerable: true, get: function () { return achievement_2.ACHIEVEMENT_CRITERIA_METRICS; } });
280
+ Object.defineProperty(exports, "ACHIEVEMENT_CRITERIA_OPS", { enumerable: true, get: function () { return achievement_2.ACHIEVEMENT_CRITERIA_OPS; } });
281
+ Object.defineProperty(exports, "ACHIEVEMENT_CRITERIA_SIGNALS", { enumerable: true, get: function () { return achievement_2.ACHIEVEMENT_CRITERIA_SIGNALS; } });
282
+ Object.defineProperty(exports, "ACHIEVEMENT_ICON_MAX_BYTES", { enumerable: true, get: function () { return achievement_2.ACHIEVEMENT_ICON_MAX_BYTES; } });
283
+ Object.defineProperty(exports, "ACHIEVEMENT_KEY_PATTERN", { enumerable: true, get: function () { return achievement_2.ACHIEVEMENT_KEY_PATTERN; } });
284
+ Object.defineProperty(exports, "ACHIEVEMENT_TROPHY_MAX_BYTES", { enumerable: true, get: function () { return achievement_2.ACHIEVEMENT_TROPHY_MAX_BYTES; } });
285
+ Object.defineProperty(exports, "ACHIEVEMENT_UNLOCK_MODES", { enumerable: true, get: function () { return achievement_2.ACHIEVEMENT_UNLOCK_MODES; } });
286
+ Object.defineProperty(exports, "DATA_STORE_CRITERIA_KEY_TEMPLATES", { enumerable: true, get: function () { return achievement_2.DATA_STORE_CRITERIA_KEY_TEMPLATES; } });
287
+ Object.defineProperty(exports, "buildAchievementCriteria", { enumerable: true, get: function () { return achievement_2.buildAchievementCriteria; } });
288
+ Object.defineProperty(exports, "buildAchievementRegistration", { enumerable: true, get: function () { return achievement_2.buildAchievementRegistration; } });
289
+ Object.defineProperty(exports, "buildAchievementUpdate", { enumerable: true, get: function () { return achievement_2.buildAchievementUpdate; } });
290
+ Object.defineProperty(exports, "formatAchievementCriteria", { enumerable: true, get: function () { return achievement_2.formatAchievementCriteria; } });
291
+ Object.defineProperty(exports, "iconContentTypeFromExtension", { enumerable: true, get: function () { return achievement_2.iconContentTypeFromExtension; } });
292
+ Object.defineProperty(exports, "isAchievementKey", { enumerable: true, get: function () { return achievement_2.isAchievementKey; } });
293
+ Object.defineProperty(exports, "resolveUnlockMode", { enumerable: true, get: function () { return achievement_2.resolveUnlockMode; } });
294
+ // In-world products. Same rule as the exports above: the MCP server reaches the
295
+ // product registry ONLY through these, so an un-exported helper is unreachable
296
+ // to an agent.
297
+ var product_2 = require("./product");
298
+ Object.defineProperty(exports, "GRANT_CODE_MAX", { enumerable: true, get: function () { return product_2.GRANT_CODE_MAX; } });
299
+ Object.defineProperty(exports, "GRANT_CODE_PATTERN", { enumerable: true, get: function () { return product_2.GRANT_CODE_PATTERN; } });
300
+ Object.defineProperty(exports, "MAX_GRANT_CURRENCY_AMOUNT", { enumerable: true, get: function () { return product_2.MAX_GRANT_CURRENCY_AMOUNT; } });
301
+ Object.defineProperty(exports, "MAX_GRANT_EFFECTS", { enumerable: true, get: function () { return product_2.MAX_GRANT_EFFECTS; } });
302
+ Object.defineProperty(exports, "MAX_GRANT_ITEM_QUANTITY", { enumerable: true, get: function () { return product_2.MAX_GRANT_ITEM_QUANTITY; } });
303
+ Object.defineProperty(exports, "MAX_PASS_DURATION_SECONDS", { enumerable: true, get: function () { return product_2.MAX_PASS_DURATION_SECONDS; } });
304
+ Object.defineProperty(exports, "PRODUCT_DESCRIPTION_MAX", { enumerable: true, get: function () { return product_2.PRODUCT_DESCRIPTION_MAX; } });
305
+ Object.defineProperty(exports, "PRODUCT_KEY_MAX", { enumerable: true, get: function () { return product_2.PRODUCT_KEY_MAX; } });
306
+ Object.defineProperty(exports, "PRODUCT_KEY_PATTERN", { enumerable: true, get: function () { return product_2.PRODUCT_KEY_PATTERN; } });
307
+ Object.defineProperty(exports, "PRODUCT_TITLE_MAX", { enumerable: true, get: function () { return product_2.PRODUCT_TITLE_MAX; } });
308
+ Object.defineProperty(exports, "WORLD_PRODUCT_TYPES", { enumerable: true, get: function () { return product_2.WORLD_PRODUCT_TYPES; } });
309
+ Object.defineProperty(exports, "buildProductRegistration", { enumerable: true, get: function () { return product_2.buildProductRegistration; } });
310
+ Object.defineProperty(exports, "buildProductUpdate", { enumerable: true, get: function () { return product_2.buildProductUpdate; } });
311
+ Object.defineProperty(exports, "isProductKey", { enumerable: true, get: function () { return product_2.isProductKey; } });
312
+ Object.defineProperty(exports, "productTypeGrantsItem", { enumerable: true, get: function () { return product_2.productTypeGrantsItem; } });
71
313
  var ability_2 = require("./ability");
72
314
  Object.defineProperty(exports, "checkAbilityBundle", { enumerable: true, get: function () { return ability_2.checkAbilityBundle; } });
73
315
  Object.defineProperty(exports, "installLocalAbility", { enumerable: true, get: function () { return ability_2.installLocalAbility; } });
@@ -75,12 +317,26 @@ Object.defineProperty(exports, "loadVendoredValidator", { enumerable: true, get:
75
317
  Object.defineProperty(exports, "loadInstalledIndexValidator", { enumerable: true, get: function () { return ability_2.loadInstalledIndexValidator; } });
76
318
  var resolve_1 = require("./resolve");
77
319
  Object.defineProperty(exports, "normalizePinRange", { enumerable: true, get: function () { return resolve_1.normalizePinRange; } });
320
+ Object.defineProperty(exports, "validateAssetPackConstraints", { enumerable: true, get: function () { return resolve_1.validateAssetPackConstraints; } });
78
321
  Object.defineProperty(exports, "resolvePins", { enumerable: true, get: function () { return resolve_1.resolvePins; } });
79
322
  var install_1 = require("./install");
80
323
  Object.defineProperty(exports, "installWorld", { enumerable: true, get: function () { return install_1.installWorld; } });
81
324
  Object.defineProperty(exports, "INSTALLED_INDEX", { enumerable: true, get: function () { return install_1.INSTALLED_INDEX; } });
82
325
  Object.defineProperty(exports, "LOCKFILE", { enumerable: true, get: function () { return install_1.LOCKFILE; } });
83
326
  Object.defineProperty(exports, "MODULES_DIR", { enumerable: true, get: function () { return install_1.MODULES_DIR; } });
327
+ Object.defineProperty(exports, "WORLD_MANIFEST_LOCATIONS", { enumerable: true, get: function () { return install_1.WORLD_MANIFEST_LOCATIONS; } });
328
+ var enginePins_2 = require("./enginePins");
329
+ Object.defineProperty(exports, "ALLOW_EXACT_ENGINE_PIN_FLAG", { enumerable: true, get: function () { return enginePins_2.ALLOW_EXACT_ENGINE_PIN_FLAG; } });
330
+ Object.defineProperty(exports, "detectExactEnginePins", { enumerable: true, get: function () { return enginePins_2.detectExactEnginePins; } });
331
+ Object.defineProperty(exports, "enginePinOverrideLogPath", { enumerable: true, get: function () { return enginePins_2.enginePinOverrideLogPath; } });
332
+ var currency_1 = require("./currency");
333
+ Object.defineProperty(exports, "assessInteractables", { enumerable: true, get: function () { return currency_1.assessInteractables; } });
334
+ Object.defineProperty(exports, "assessPlatformDelivery", { enumerable: true, get: function () { return currency_1.assessPlatformDelivery; } });
335
+ Object.defineProperty(exports, "assessThreeCurrency", { enumerable: true, get: function () { return currency_1.assessThreeCurrency; } });
336
+ Object.defineProperty(exports, "assessVaultAssets", { enumerable: true, get: function () { return currency_1.assessVaultAssets; } });
337
+ Object.defineProperty(exports, "assessWeaponPins", { enumerable: true, get: function () { return currency_1.assessWeaponPins; } });
338
+ Object.defineProperty(exports, "assessWorldCurrency", { enumerable: true, get: function () { return currency_1.assessWorldCurrency; } });
339
+ Object.defineProperty(exports, "ADVISORY_SYSTEMS", { enumerable: true, get: function () { return currency_1.ADVISORY_SYSTEMS; } });
84
340
  var config_2 = require("./config");
85
341
  Object.defineProperty(exports, "apiUrlMatchesEnv", { enumerable: true, get: function () { return config_2.apiUrlMatchesEnv; } });
86
342
  Object.defineProperty(exports, "credsEnvMismatchWarning", { enumerable: true, get: function () { return config_2.credsEnvMismatchWarning; } });
@@ -92,13 +348,102 @@ Object.defineProperty(exports, "loadCredentials", { enumerable: true, get: funct
92
348
  Object.defineProperty(exports, "saveCredentials", { enumerable: true, get: function () { return config_2.saveCredentials; } });
93
349
  Object.defineProperty(exports, "clearCredentials", { enumerable: true, get: function () { return config_2.clearCredentials; } });
94
350
  Object.defineProperty(exports, "jwtExpiresAtIso", { enumerable: true, get: function () { return config_2.jwtExpiresAtIso; } });
95
- var browserLogin_1 = require("./browserLogin");
96
- Object.defineProperty(exports, "browserLogin", { enumerable: true, get: function () { return browserLogin_1.browserLogin; } });
97
- Object.defineProperty(exports, "defaultClientTokenName", { enumerable: true, get: function () { return browserLogin_1.defaultClientTokenName; } });
351
+ var browserLogin_2 = require("./browserLogin");
352
+ Object.defineProperty(exports, "browserLogin", { enumerable: true, get: function () { return browserLogin_2.browserLogin; } });
353
+ Object.defineProperty(exports, "defaultClientTokenName", { enumerable: true, get: function () { return browserLogin_2.defaultClientTokenName; } });
98
354
  var init_1 = require("./init");
99
355
  Object.defineProperty(exports, "initTemplate", { enumerable: true, get: function () { return init_1.initTemplate; } });
356
+ Object.defineProperty(exports, "slugify", { enumerable: true, get: function () { return init_1.slugify; } });
100
357
  var initAbility_1 = require("./initAbility");
101
358
  Object.defineProperty(exports, "initAbilityTemplate", { enumerable: true, get: function () { return initAbility_1.initAbilityTemplate; } });
359
+ var realizability_2 = require("./realizability");
360
+ Object.defineProperty(exports, "checkRealizability", { enumerable: true, get: function () { return realizability_2.checkRealizability; } });
361
+ Object.defineProperty(exports, "registryRealizabilityDeps", { enumerable: true, get: function () { return realizability_2.registryRealizabilityDeps; } });
362
+ Object.defineProperty(exports, "renderRealizabilityRefusal", { enumerable: true, get: function () { return realizability_2.renderRealizabilityRefusal; } });
363
+ Object.defineProperty(exports, "TICK_NODE_CEILING", { enumerable: true, get: function () { return realizability_2.TICK_NODE_CEILING; } });
364
+ var money_1 = require("./money");
365
+ Object.defineProperty(exports, "getLixBalance", { enumerable: true, get: function () { return money_1.getLixBalance; } });
366
+ Object.defineProperty(exports, "listJobs", { enumerable: true, get: function () { return money_1.listJobs; } });
367
+ Object.defineProperty(exports, "formatJobs", { enumerable: true, get: function () { return money_1.formatJobs; } });
368
+ Object.defineProperty(exports, "quoteGeneration", { enumerable: true, get: function () { return money_1.quoteGeneration; } });
369
+ Object.defineProperty(exports, "normalizeQuote", { enumerable: true, get: function () { return money_1.normalizeQuote; } });
370
+ Object.defineProperty(exports, "formatBalance", { enumerable: true, get: function () { return money_1.formatBalance; } });
371
+ Object.defineProperty(exports, "formatQuote", { enumerable: true, get: function () { return money_1.formatQuote; } });
372
+ Object.defineProperty(exports, "formatLix", { enumerable: true, get: function () { return money_1.formatLix; } });
373
+ Object.defineProperty(exports, "formatReceipt", { enumerable: true, get: function () { return money_1.formatReceipt; } });
374
+ Object.defineProperty(exports, "formatWaitState", { enumerable: true, get: function () { return money_1.formatWaitState; } });
375
+ Object.defineProperty(exports, "receiptLix", { enumerable: true, get: function () { return money_1.receiptLix; } });
376
+ Object.defineProperty(exports, "roundLix", { enumerable: true, get: function () { return money_1.roundLix; } });
377
+ var verifySubPath_1 = require("./verifySubPath");
378
+ Object.defineProperty(exports, "verifySubPath", { enumerable: true, get: function () { return verifySubPath_1.verifySubPath; } });
379
+ Object.defineProperty(exports, "formatSubPathResult", { enumerable: true, get: function () { return verifySubPath_1.formatSubPathResult; } });
380
+ Object.defineProperty(exports, "DEFAULT_MOUNT_PREFIX", { enumerable: true, get: function () { return verifySubPath_1.DEFAULT_MOUNT_PREFIX; } });
381
+ var assets_1 = require("./assets");
382
+ Object.defineProperty(exports, "approveDreamerGate", { enumerable: true, get: function () { return assets_1.approveDreamerGate; } });
383
+ Object.defineProperty(exports, "describeGateAdvance", { enumerable: true, get: function () { return assets_1.describeGateAdvance; } });
384
+ Object.defineProperty(exports, "extensionFor", { enumerable: true, get: function () { return assets_1.extensionFor; } });
385
+ Object.defineProperty(exports, "formatStrandedJob", { enumerable: true, get: function () { return assets_1.formatStrandedJob; } });
386
+ Object.defineProperty(exports, "generateAndPublishAsset", { enumerable: true, get: function () { return assets_1.generateAndPublishAsset; } });
387
+ Object.defineProperty(exports, "generateAndPublishAssetFromReference", { enumerable: true, get: function () { return assets_1.generateAndPublishAssetFromReference; } });
388
+ Object.defineProperty(exports, "generateAudio", { enumerable: true, get: function () { return assets_1.generateAudio; } });
389
+ Object.defineProperty(exports, "generateImage", { enumerable: true, get: function () { return assets_1.generateImage; } });
390
+ Object.defineProperty(exports, "generateStandaloneAsset", { enumerable: true, get: function () { return assets_1.generateStandaloneAsset; } });
391
+ Object.defineProperty(exports, "getDreamerAssetGenerationJob", { enumerable: true, get: function () { return assets_1.getDreamerAssetGenerationJob; } });
392
+ Object.defineProperty(exports, "getStandaloneAssetGenerationJob", { enumerable: true, get: function () { return assets_1.getStandaloneAssetGenerationJob; } });
393
+ Object.defineProperty(exports, "getVaultAsset", { enumerable: true, get: function () { return assets_1.getVaultAsset; } });
394
+ Object.defineProperty(exports, "getVaultAssetUsage", { enumerable: true, get: function () { return assets_1.getVaultAssetUsage; } });
395
+ Object.defineProperty(exports, "getVaultAssetVersions", { enumerable: true, get: function () { return assets_1.getVaultAssetVersions; } });
396
+ Object.defineProperty(exports, "installVaultAsset", { enumerable: true, get: function () { return assets_1.installVaultAsset; } });
397
+ Object.defineProperty(exports, "listDreamerVoices", { enumerable: true, get: function () { return assets_1.listDreamerVoices; } });
398
+ Object.defineProperty(exports, "listMaterials", { enumerable: true, get: function () { return assets_1.listMaterials; } });
399
+ Object.defineProperty(exports, "MATERIAL_RENDITION_SELECTIONS", { enumerable: true, get: function () { return assets_1.MATERIAL_RENDITION_SELECTIONS; } });
400
+ Object.defineProperty(exports, "resolveMaterial", { enumerable: true, get: function () { return assets_1.resolveMaterial; } });
401
+ Object.defineProperty(exports, "resumeAndPublishAsset", { enumerable: true, get: function () { return assets_1.resumeAndPublishAsset; } });
402
+ Object.defineProperty(exports, "retryDreamerJob", { enumerable: true, get: function () { return assets_1.retryDreamerJob; } });
403
+ Object.defineProperty(exports, "reviseDreamerGate", { enumerable: true, get: function () { return assets_1.reviseDreamerGate; } });
404
+ Object.defineProperty(exports, "saveGeneratedAsset", { enumerable: true, get: function () { return assets_1.saveGeneratedAsset; } });
405
+ Object.defineProperty(exports, "StrandedJobError", { enumerable: true, get: function () { return assets_1.StrandedJobError; } });
406
+ Object.defineProperty(exports, "searchVaultAssets", { enumerable: true, get: function () { return assets_1.searchVaultAssets; } });
407
+ Object.defineProperty(exports, "startDreamerAssetGeneration", { enumerable: true, get: function () { return assets_1.startDreamerAssetGeneration; } });
408
+ Object.defineProperty(exports, "startDreamerAssetGenerationFromReference", { enumerable: true, get: function () { return assets_1.startDreamerAssetGenerationFromReference; } });
409
+ Object.defineProperty(exports, "startStandaloneAssetGeneration", { enumerable: true, get: function () { return assets_1.startStandaloneAssetGeneration; } });
410
+ Object.defineProperty(exports, "updateVaultAssetMetadata", { enumerable: true, get: function () { return assets_1.updateVaultAssetMetadata; } });
411
+ Object.defineProperty(exports, "UnavailableCapabilityError", { enumerable: true, get: function () { return assets_1.UnavailableCapabilityError; } });
412
+ Object.defineProperty(exports, "VAULT_ASSET_KINDS", { enumerable: true, get: function () { return assets_1.VAULT_ASSET_KINDS; } });
413
+ Object.defineProperty(exports, "DEFAULT_RESOLUTION_KEY", { enumerable: true, get: function () { return assets_1.DEFAULT_RESOLUTION_KEY; } });
414
+ Object.defineProperty(exports, "materialDefaultResolutionKey", { enumerable: true, get: function () { return assets_1.materialDefaultResolutionKey; } });
415
+ Object.defineProperty(exports, "materialResolutionOptions", { enumerable: true, get: function () { return assets_1.materialResolutionOptions; } });
416
+ Object.defineProperty(exports, "matchMaterialResolution", { enumerable: true, get: function () { return assets_1.matchMaterialResolution; } });
417
+ var identity_1 = require("./materials/identity");
418
+ Object.defineProperty(exports, "materialContinuumIdentity", { enumerable: true, get: function () { return identity_1.materialContinuumIdentity; } });
419
+ Object.defineProperty(exports, "parseContinuumCurrentVersion", { enumerable: true, get: function () { return identity_1.parseContinuumCurrentVersion; } });
420
+ Object.defineProperty(exports, "parseVaultMaterialSearch", { enumerable: true, get: function () { return identity_1.parseVaultMaterialSearch; } });
421
+ Object.defineProperty(exports, "platformMaterialTag", { enumerable: true, get: function () { return identity_1.platformMaterialTag; } });
422
+ var pins_1 = require("./materials/pins");
423
+ Object.defineProperty(exports, "clearMaterialPinCache", { enumerable: true, get: function () { return pins_1.clearMaterialPinCache; } });
424
+ // --- Unreal: cook candidate → HELIX World Build -----------------------------
425
+ var unrealCandidate_1 = require("./unrealCandidate");
426
+ Object.defineProperty(exports, "auditCookScope", { enumerable: true, get: function () { return unrealCandidate_1.auditCookScope; } });
427
+ Object.defineProperty(exports, "candidateArtifactDigest", { enumerable: true, get: function () { return unrealCandidate_1.candidateArtifactDigest; } });
428
+ Object.defineProperty(exports, "defaultIdempotencyKey", { enumerable: true, get: function () { return unrealCandidate_1.defaultIdempotencyKey; } });
429
+ Object.defineProperty(exports, "planSharedRuntimePublish", { enumerable: true, get: function () { return unrealCandidate_1.planSharedRuntimePublish; } });
430
+ Object.defineProperty(exports, "UnrealCandidateError", { enumerable: true, get: function () { return unrealCandidate_1.UnrealCandidateError; } });
431
+ Object.defineProperty(exports, "verifyUnrealCandidate", { enumerable: true, get: function () { return unrealCandidate_1.verifyUnrealCandidate; } });
432
+ var unrealPublish_1 = require("./unrealPublish");
433
+ Object.defineProperty(exports, "assertClientDeliveryMatchesPlan", { enumerable: true, get: function () { return unrealPublish_1.assertClientDeliveryMatchesPlan; } });
434
+ Object.defineProperty(exports, "assertCreateResponseMatchesPlan", { enumerable: true, get: function () { return unrealPublish_1.assertCreateResponseMatchesPlan; } });
435
+ Object.defineProperty(exports, "assertReceipt", { enumerable: true, get: function () { return unrealPublish_1.assertReceipt; } });
436
+ Object.defineProperty(exports, "publishUnrealBuild", { enumerable: true, get: function () { return unrealPublish_1.publishUnrealBuild; } });
437
+ Object.defineProperty(exports, "renderPublishFailure", { enumerable: true, get: function () { return unrealPublish_1.renderPublishFailure; } });
438
+ Object.defineProperty(exports, "resolveWorldId", { enumerable: true, get: function () { return unrealPublish_1.resolveWorldId; } });
439
+ Object.defineProperty(exports, "uploadArtifact", { enumerable: true, get: function () { return unrealPublish_1.uploadArtifact; } });
440
+ var unreal_1 = require("./unreal");
441
+ Object.defineProperty(exports, "formatUnrealValidationReport", { enumerable: true, get: function () { return unreal_1.formatUnrealValidationReport; } });
442
+ Object.defineProperty(exports, "HELIX_UNREAL_CONTRACT_VERSION", { enumerable: true, get: function () { return unreal_1.HELIX_UNREAL_CONTRACT_VERSION; } });
443
+ Object.defineProperty(exports, "HELIX_UNREAL_ENGINE_VERSION", { enumerable: true, get: function () { return unreal_1.HELIX_UNREAL_ENGINE_VERSION; } });
444
+ Object.defineProperty(exports, "initUnrealManifest", { enumerable: true, get: function () { return unreal_1.initUnrealManifest; } });
445
+ Object.defineProperty(exports, "packageUnrealProject", { enumerable: true, get: function () { return unreal_1.packageUnrealProject; } });
446
+ Object.defineProperty(exports, "validateUnrealProject", { enumerable: true, get: function () { return unreal_1.validateUnrealProject; } });
102
447
  // Character import (`helix character import`) as a programmatic API. The implementation pulls in
103
448
  // gltf-transform + meshoptimizer (~165ms of require time), so it is loaded lazily at call time —
104
449
  // requiring lib.js (and therefore `helix --help`) stays fast.
@@ -106,15 +451,148 @@ async function importCharacter(opts) {
106
451
  const mod = await Promise.resolve().then(() => __importStar(require('./character/importCharacter')));
107
452
  return mod.importCharacter(opts);
108
453
  }
454
+ // Headless screenshot capture (`helix screenshot`) as a programmatic API. Pulls in Playwright, so it
455
+ // is loaded lazily at call time — requiring lib.js stays fast.
456
+ async function captureScreenshots(opts) {
457
+ const mod = await Promise.resolve().then(() => __importStar(require('./screenshot/captureScreenshots')));
458
+ return mod.captureScreenshots(opts);
459
+ }
460
+ // Downscaled JPEG preview of a captured image (base64) — a compact stand-in for shipping a full-size
461
+ // PNG, e.g. as an MCP image content block. Pulls in sharp, so it is loaded lazily at call time.
462
+ async function encodeImagePreview(file, maxWidth) {
463
+ const mod = await Promise.resolve().then(() => __importStar(require('./screenshot/encodeImagePreview')));
464
+ return mod.encodeImagePreview(file, maxWidth);
465
+ }
466
+ // Gesture inspection (`helix gesture inspect`) as a programmatic API. Loads the WORLD's installed
467
+ // character system + its three at call time, so it is lazy for the same reason as the others.
468
+ async function inspectGesture(opts) {
469
+ const mod = await Promise.resolve().then(() => __importStar(require('./gesture/inspect')));
470
+ return mod.inspectGesture(opts);
471
+ }
472
+ async function formatGestureInspection(result, opts) {
473
+ const mod = await Promise.resolve().then(() => __importStar(require('./gesture/inspect')));
474
+ return mod.formatInspect(result, opts);
475
+ }
476
+ // Gesture contact sheet (`helix gesture shot`) as a programmatic API. Pulls in Playwright, so it is loaded
477
+ // lazily at call time — requiring lib.js stays fast.
478
+ async function captureGesture(opts) {
479
+ const mod = await Promise.resolve().then(() => __importStar(require('./gesture/capture')));
480
+ return mod.captureGesture(opts);
481
+ }
482
+ // World layout inspection (`helix world inspect`) as a programmatic API. The analyzer, formatter,
483
+ // and differ are pure over snapshot JSON and load directly; the transport pulls in Playwright, so
484
+ // it is loaded lazily at call time — requiring lib.js stays fast.
485
+ var analyze_1 = require("./world/analyze");
486
+ Object.defineProperty(exports, "analyzeWorld", { enumerable: true, get: function () { return analyze_1.analyzeWorld; } });
487
+ Object.defineProperty(exports, "sortFindings", { enumerable: true, get: function () { return analyze_1.sortFindings; } });
488
+ var format_1 = require("./world/format");
489
+ Object.defineProperty(exports, "formatWorldInspection", { enumerable: true, get: function () { return format_1.formatWorldInspection; } });
490
+ Object.defineProperty(exports, "DEFAULT_REPORT", { enumerable: true, get: function () { return format_1.DEFAULT_REPORT; } });
491
+ var diff_1 = require("./world/diff");
492
+ Object.defineProperty(exports, "diffWorldSnapshots", { enumerable: true, get: function () { return diff_1.diffWorldSnapshots; } });
493
+ Object.defineProperty(exports, "formatWorldDiff", { enumerable: true, get: function () { return diff_1.formatWorldDiff; } });
494
+ var zones_1 = require("./world/zones");
495
+ Object.defineProperty(exports, "analyzeZones", { enumerable: true, get: function () { return zones_1.analyzeZones; } });
496
+ var focus_1 = require("./world/focus");
497
+ Object.defineProperty(exports, "formatWorldFocus", { enumerable: true, get: function () { return focus_1.formatWorldFocus; } });
498
+ Object.defineProperty(exports, "resolveFocus", { enumerable: true, get: function () { return focus_1.resolveFocus; } });
499
+ var wiring_1 = require("./world/wiring");
500
+ Object.defineProperty(exports, "detectInspectWiring", { enumerable: true, get: function () { return wiring_1.detectInspectWiring; } });
501
+ Object.defineProperty(exports, "detectNpcWiring", { enumerable: true, get: function () { return wiring_1.detectNpcWiring; } });
502
+ var canonicalize_1 = require("./world/canonicalize");
503
+ Object.defineProperty(exports, "canonicalizeSnapshot", { enumerable: true, get: function () { return canonicalize_1.canonicalizeSnapshot; } });
504
+ var baseline_1 = require("./world/baseline");
505
+ Object.defineProperty(exports, "applyBaseline", { enumerable: true, get: function () { return baseline_1.applyBaseline; } });
506
+ Object.defineProperty(exports, "buildBaseline", { enumerable: true, get: function () { return baseline_1.buildBaseline; } });
507
+ Object.defineProperty(exports, "parseBaseline", { enumerable: true, get: function () { return baseline_1.parseBaseline; } });
508
+ Object.defineProperty(exports, "anchorOf", { enumerable: true, get: function () { return baseline_1.anchorOf; } });
509
+ Object.defineProperty(exports, "BASELINE_FILENAME", { enumerable: true, get: function () { return baseline_1.BASELINE_FILENAME; } });
510
+ async function snapshotWorld(opts) {
511
+ const mod = await Promise.resolve().then(() => __importStar(require('./world/snapshotWorld')));
512
+ return mod.snapshotWorld(opts);
513
+ }
514
+ // NPC simulation measurement + filmstrip over the same headless inspect lane. Both pull in Playwright,
515
+ // so they load lazily at call time — requiring lib.js stays fast. The metric math itself is pure and
516
+ // lives in ./npc/metrics; the formatter is pure too, but stays lazy so one import path covers both.
517
+ async function inspectNpc(opts) {
518
+ const mod = await Promise.resolve().then(() => __importStar(require('./npc/inspect')));
519
+ return mod.inspectNpc(opts);
520
+ }
521
+ async function formatNpcInspection(result) {
522
+ const mod = await Promise.resolve().then(() => __importStar(require('./npc/format')));
523
+ return mod.formatNpcInspection(result);
524
+ }
525
+ async function captureNpc(opts) {
526
+ const mod = await Promise.resolve().then(() => __importStar(require('./npc/capture')));
527
+ return mod.captureNpc(opts);
528
+ }
529
+ // Reads WORLD_METRICS from the world's installed system — loads real ESM, so lazy like the others.
530
+ async function readWorldMetrics(worldDir) {
531
+ const mod = await Promise.resolve().then(() => __importStar(require('./world/readWorldMetrics')));
532
+ return mod.readWorldMetrics(worldDir);
533
+ }
534
+ async function renderWorldMetricsText(metrics) {
535
+ const mod = await Promise.resolve().then(() => __importStar(require('./world/readWorldMetrics')));
536
+ return mod.renderWorldMetrics(metrics);
537
+ }
538
+ exports.WORLD_METRICS_UNSUPPORTED = 'the installed humanoid-character does not export WORLD_METRICS — it predates the table (added in 0.2.13). ' +
539
+ 'Any existing ^0.2 pin already allows it — rerun the install (MCP: install_world_packages · CLI: helix install) and rebuild.';
540
+ /** The bone axis table, read from a world's OWN pinned system — the engine holds the only authored copy. */
541
+ async function readAxisTable(worldDir) {
542
+ const [{ loadGestureRuntime }, { renderAxisTableMarkdown, renderAxisTableJson }] = await Promise.all([
543
+ Promise.resolve().then(() => __importStar(require('./gesture/worldRuntime'))),
544
+ Promise.resolve().then(() => __importStar(require('./gesture/axisReference'))),
545
+ ]);
546
+ const runtime = await loadGestureRuntime(worldDir);
547
+ if (runtime.axisTable === null)
548
+ return null;
549
+ return { markdown: renderAxisTableMarkdown(runtime.axisTable), json: renderAxisTableJson(runtime.axisTable) };
550
+ }
109
551
  const UPLOAD_CONCURRENCY = 6;
552
+ exports.WORLD_DESCRIPTION_MAX = 1000;
110
553
  // Validate + resolve-or-create world + upload + finalize. Throws ApiError /
111
554
  // Error with human-readable messages on any failure.
112
- async function publishWorld(root, creds, onProgress = () => undefined) {
113
- const bundle = (0, bundle_1.checkBundle)(root);
555
+ async function publishWorld(root, creds, onProgress = () => undefined, options = {}) {
556
+ const enginePinReason = options.allowExactEnginePin === undefined ? undefined : (0, enginePins_1.requireOverrideReason)(options.allowExactEnginePin);
557
+ const bundle = (0, bundle_1.checkBundle)(root, {
558
+ compatibleResolverOrigin: creds.apiUrl,
559
+ allowExactEnginePin: enginePinReason,
560
+ });
114
561
  if (bundle.errors.length) {
115
562
  throw new Error(`Bundle is invalid:\n${bundle.errors.map((e) => ` - ${e}`).join('\n')}`);
116
563
  }
564
+ if (enginePinReason && bundle.exactEnginePins?.length) {
565
+ // Audit BEFORE any network write: an override that cannot be logged is refused (recordEnginePinOverride throws).
566
+ const logPath = (0, enginePins_1.recordEnginePinOverride)({
567
+ at: new Date().toISOString(),
568
+ slug: bundle.manifest.slug,
569
+ reason: enginePinReason,
570
+ command: 'publish',
571
+ pins: bundle.exactEnginePins.map((pin) => ({ slug: pin.slug, range: pin.range, sources: pin.sources })),
572
+ apiUrl: creds.apiUrl,
573
+ });
574
+ onProgress(`⚠ ${(0, enginePins_1.exactEnginePinOverrideWarning)(bundle.exactEnginePins, enginePinReason)}`);
575
+ onProgress(` override recorded in ${logPath}`);
576
+ }
577
+ if (bundle.excluded.length) {
578
+ onProgress(`excluded ${bundle.excluded.length} path(s) via .helixignore`);
579
+ }
117
580
  const manifest = bundle.manifest;
581
+ // Refuse a world the server cannot realize BEFORE anything touches the network. Publishing first
582
+ // and discovering it afterwards would leave a live world that no player can start, which is the
583
+ // failure this gate exists for. flat-v0 and pre-module multiplayer worlds are untouched by this
584
+ // and never reach the registry.
585
+ if (!options.skipRealizabilityCheck) {
586
+ const failures = await (0, realizability_1.checkRealizability)(manifest, options.realizabilityDeps ?? (0, realizability_1.registryRealizabilityDeps)(creds.apiUrl));
587
+ if (failures.length)
588
+ throw new Error((0, realizability_1.renderRealizabilityRefusal)(failures));
589
+ }
590
+ // Build the source archive BEFORE anything touches the network. An over-cap
591
+ // or unreadable source directory must refuse while nothing has happened yet —
592
+ // failing after the build is live would leave the creator with a published
593
+ // world and an error, which reads as a failed publish.
594
+ const sourceDir = options.sourceDir ?? (0, node_path_1.resolve)(root, '..');
595
+ const archive = options.uploadSource ? (0, source_archive_1.createSourceArchive)(sourceDir) : null;
118
596
  // Emit the runtime multiplayer config (multiplayer.json) into the bundle for multiplayer worlds. It's
119
597
  // generated in-memory from the validated manifest — the authoritative copy — so drop any hand-placed
120
598
  // one first, keeping exactly one entry. The backend signs its URL into the room credential (configUrl).
@@ -123,28 +601,115 @@ async function publishWorld(root, creds, onProgress = () => undefined) {
123
601
  bundle.files = bundle.files.filter((f) => f.path !== bundle_1.MULTIPLAYER_CONFIG_FILENAME);
124
602
  bundle.files.push(multiplayerFile);
125
603
  }
604
+ const placement = (0, placementRequest_1.placementRequestBundleFile)(root, bundle.files, multiplayerFile, options.placementBindings ? (0, node_fs_1.readFileSync)(options.placementBindings) : undefined);
605
+ if (placement) {
606
+ bundle.files = bundle.files.filter(f => f.path !== placementRequest_1.PLACEMENT_REQUEST_FILENAME);
607
+ bundle.files.push(placement.file);
608
+ }
126
609
  const api = api_1.HelixApi.forCredentials(creds);
127
610
  const mine = await api.request('GET', '/api/v1/instant-worlds/me');
128
611
  let world = mine.data.find((w) => w.slug === manifest.slug);
612
+ if (placement && (!world || world.id !== placement.request.worldId)) {
613
+ throw new Error('Placement request must target the existing owned world; nothing was published');
614
+ }
615
+ // Resolve before capture, but capture/validate BEFORE any World/Build write.
616
+ const existingDetail = world ? await api.requestItem('GET', `/api/v1/instant-worlds/${manifest.slug}`) : null;
617
+ const requestedThumbnail = options.thumbnail ?? findBundleThumbnail(root);
618
+ bundle.files = bundle.files.filter(f => !/^helix\.thumbnail\.(auto|custom|required)\./.test(f.path));
619
+ let thumbnailSource = 'existing';
620
+ if (!existingDetail?.hasCustomThumbnail) {
621
+ let bytes;
622
+ let path;
623
+ if (requestedThumbnail) {
624
+ mediaContentTypeFromExtension(requestedThumbnail);
625
+ bytes = (0, node_fs_1.readFileSync)(requestedThumbnail);
626
+ // Consume the dedicated conventional cover once. Explicit selections may be
627
+ // runtime assets whose original paths must remain available to the World.
628
+ if (!options.thumbnail)
629
+ bundle.files = bundle.files.filter(f => (0, node_path_1.resolve)(f.absolutePath) !== (0, node_path_1.resolve)(requestedThumbnail));
630
+ path = `helix.thumbnail.custom${(0, node_path_1.extname)(requestedThumbnail).toLowerCase()}`;
631
+ thumbnailSource = options.thumbnail ? 'option' : 'bundle';
632
+ }
633
+ else {
634
+ onProgress('Capturing publication thumbnail from the ready world');
635
+ const snapshot = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), 'helix-publish-bundle-'));
636
+ try {
637
+ // Capture precisely the filtered/generated bundle, and upload those same immutable bytes.
638
+ for (const file of bundle.files) {
639
+ file.content = file.content ?? (0, node_fs_1.readFileSync)(file.absolutePath);
640
+ file.size = file.content.byteLength;
641
+ const staged = (0, node_path_1.join)(snapshot, file.path);
642
+ (0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(staged), { recursive: true });
643
+ (0, node_fs_1.writeFileSync)(staged, file.content);
644
+ }
645
+ bytes = await (options.captureThumbnail ?? publishThumbnail_1.capturePublishThumbnail)(snapshot, manifest.entry, onProgress);
646
+ }
647
+ catch (err) {
648
+ throw new Error(`Automatic thumbnail capture failed; nothing was published: ${describeSourceFailure(err)}`);
649
+ }
650
+ finally {
651
+ (0, node_fs_1.rmSync)(snapshot, { recursive: true, force: true });
652
+ }
653
+ path = publishThumbnail_1.AUTO_THUMBNAIL_PATH;
654
+ thumbnailSource = 'capture';
655
+ }
656
+ assertMediaSizeOk(bytes.byteLength, 'thumbnail');
657
+ if (!bytes.byteLength)
658
+ throw new Error('Publication thumbnail is empty; nothing was published');
659
+ // Keep generated bytes in memory: source and bundle directories remain untouched.
660
+ bundle.files = bundle.files.filter(f => !/^helix\.thumbnail\.(auto|custom)\./.test(f.path));
661
+ bundle.files.push({ path, size: bytes.byteLength, absolutePath: '', content: bytes });
662
+ }
663
+ if (bundle.files.length > helix_manifest_1.BUNDLE_MAX_FILES || bundle.files.reduce((sum, f) => sum + f.size, 0) > helix_manifest_1.BUNDLE_MAX_TOTAL_BYTES) {
664
+ throw new Error('Bundle including publication thumbnail exceeds the file count or byte budget; nothing was published');
665
+ }
129
666
  if (!world) {
130
667
  onProgress(`Creating world "${manifest.title}" (${manifest.slug})`);
131
668
  world = await api.requestItem('POST', '/api/v1/instant-worlds', {
132
669
  title: manifest.title,
133
670
  slug: manifest.slug,
671
+ ...(options.description !== undefined ? { description: options.description } : {}),
672
+ });
673
+ }
674
+ else if (options.description !== undefined) {
675
+ // Existing world: the create body never runs again, so the description needs its own write.
676
+ // An empty string deliberately CLEARS it — that is how you remove a description.
677
+ onProgress(options.description ? 'Updating the world description' : 'Clearing the world description');
678
+ await api.request('PATCH', `/api/v1/instant-worlds/${world.id}`, {
679
+ description: options.description,
134
680
  });
135
681
  }
136
682
  onProgress(`Requesting upload for ${bundle.files.length} files`);
683
+ const buildFiles = bundle.files.map((file) => {
684
+ const body = file.content ?? (0, node_fs_1.readFileSync)(file.absolutePath);
685
+ return {
686
+ path: file.path,
687
+ size: file.size,
688
+ contentSha256: (0, node_crypto_1.createHash)('sha256').update(body).digest('hex'),
689
+ };
690
+ });
137
691
  const build = await api.requestItem('POST', `/api/v1/instant-worlds/${world.id}/builds`, {
138
692
  manifest,
139
- files: bundle.files.map((f) => ({ path: f.path, size: f.size })),
693
+ files: buildFiles,
140
694
  });
695
+ if (build.thumbnailAssignmentVersion !== 1)
696
+ throw new Error('Backend does not support atomic publication thumbnails. Build remains inactive; activate the backend fix before retrying.');
697
+ const declaredByPath = new Map(buildFiles.map((file) => [file.path, file]));
141
698
  let done = 0;
142
699
  const queue = [...build.uploads];
143
700
  await Promise.all(Array.from({ length: UPLOAD_CONCURRENCY }, async () => {
144
701
  for (let ticket = queue.shift(); ticket; ticket = queue.shift()) {
145
702
  const file = bundle.files.find((f) => f.path === ticket.path);
703
+ const declared = declaredByPath.get(ticket.path);
704
+ if (ticket.contentSha256 !== declared.contentSha256) {
705
+ throw new Error(`upload ticket digest changed for ${ticket.path}; refusing to upload different bytes`);
706
+ }
146
707
  // Generated files (multiplayer.json) carry in-memory content; on-disk files are read by path.
147
- await (0, api_1.uploadToTicket)(ticket.url, file.content ?? (0, node_fs_1.readFileSync)(file.absolutePath), ticket.contentType, ticket.cacheControl);
708
+ const body = file.content ?? (0, node_fs_1.readFileSync)(file.absolutePath);
709
+ if ((0, node_crypto_1.createHash)('sha256').update(body).digest('hex') !== declared.contentSha256) {
710
+ throw new Error(`bundle bytes changed after upload intent for ${ticket.path}; rebuild before publishing`);
711
+ }
712
+ await (0, api_1.uploadToTicket)(ticket.url, body, ticket.contentType, ticket.cacheControl, { contentSha256: ticket.contentSha256, writeOnce: true });
148
713
  done += 1;
149
714
  onProgress(`Uploaded ${done}/${build.uploads.length}`);
150
715
  }
@@ -152,6 +717,32 @@ async function publishWorld(root, creds, onProgress = () => undefined) {
152
717
  onProgress('Finalizing');
153
718
  await api.request('POST', `/api/v1/instant-worlds/${world.id}/builds/${build.buildId}/finalize`);
154
719
  const detail = await api.requestItem('GET', `/api/v1/instant-worlds/${manifest.slug}`);
720
+ if (detail.id !== world.id || detail.activeBuildId !== build.buildId)
721
+ throw new Error(`Build ${build.buildId} finalized, but another Build is now active; publication result is superseded. Inspect the World before retrying.`);
722
+ if (!detail.thumbnailUrl || detail.thumbnailUrl.startsWith('data:image/svg')) {
723
+ throw new Error(`Build ${build.buildId} was activated but its thumbnail is missing; publication is incomplete. Inspect this Build before retrying.`);
724
+ }
725
+ if (detail.hasCustomThumbnail && thumbnailSource === 'capture')
726
+ thumbnailSource = 'existing';
727
+ const settledDetail = detail;
728
+ const thumbnailWarning = null;
729
+ let source = { state: 'skipped' };
730
+ if (archive) {
731
+ onProgress(`Uploading source (${archive.files.length} files, ${(0, source_archive_1.formatArchiveSize)(archive.bytes.byteLength)})`);
732
+ try {
733
+ const recorded = await uploadWorldSource(api, detail.id, archive.bytes);
734
+ source = {
735
+ state: 'uploaded',
736
+ sizeBytes: archive.bytes.byteLength,
737
+ fileCount: archive.files.length,
738
+ version: recorded.version,
739
+ projectId: recorded.projectId,
740
+ };
741
+ }
742
+ catch (err) {
743
+ source = { state: 'failed', message: describeSourceFailure(err) };
744
+ }
745
+ }
155
746
  return {
156
747
  slug: manifest.slug,
157
748
  title: manifest.title,
@@ -159,30 +750,552 @@ async function publishWorld(root, creds, onProgress = () => undefined) {
159
750
  buildNumber: build.buildNumber,
160
751
  playUrl: detail.playUrl,
161
752
  worldUrl: `${creds.apiUrl}/api/v1/instant-worlds/${manifest.slug}`,
753
+ worldId: detail.id,
754
+ hasCustomThumbnail: settledDetail.hasCustomThumbnail,
755
+ thumbnailUrl: settledDetail.thumbnailUrl ?? null,
756
+ thumbnailSource,
757
+ thumbnailWarning,
758
+ source,
759
+ };
760
+ }
761
+ // --- World identity, without a build ----------------------------------------
762
+ /** Who may stand up a persistent server for a world (backend `ServerCreationPermission`). */
763
+ exports.SERVER_CREATION_PERMISSIONS = ['creator', 'collaborators', 'anyone'];
764
+ /**
765
+ * Mint a world ROW without publishing a build — the identity products and
766
+ * achievements register against.
767
+ *
768
+ * Idempotency is CLIENT-side and lookup-first, exactly as publishWorld resolves
769
+ * a world: the backend 409s a duplicate slug even for its owner (its only
770
+ * server-side idempotency is keyed on projectId, which the public route's
771
+ * whitelisting ValidationPipe strips), so a bare re-POST is not an option. A
772
+ * slug owned by someone else surfaces the backend's 409 verbatim.
773
+ */
774
+ async function createWorld(api, options) {
775
+ // The server trims + lowercases the slug before it stores one, so match on the
776
+ // same normalization or a stray "My-World" misses its own row and re-POSTs.
777
+ const slug = options.slug.trim().toLowerCase();
778
+ const mine = await api.request('GET', '/api/v1/instant-worlds/me');
779
+ const existing = mine.data.find((w) => w.slug === slug);
780
+ if (existing) {
781
+ return { id: existing.id, slug: existing.slug, status: existing.status, created: false };
782
+ }
783
+ // SingleResponseDto ({ item: T }), same envelope api.requestItem unwraps.
784
+ const response = await api.request('POST', '/api/v1/instant-worlds', {
785
+ title: options.title,
786
+ slug,
787
+ ...(options.description !== undefined ? { description: options.description } : {}),
788
+ ...(options.serverCreationPermission !== undefined
789
+ ? { serverCreationPermission: options.serverCreationPermission }
790
+ : {}),
791
+ });
792
+ const created = response.item;
793
+ return { id: created.id, slug: created.slug, status: created.status, created: true };
794
+ }
795
+ /**
796
+ * Upload one source archive against an already-published world.
797
+ *
798
+ * ONE byte length is computed once and sent to BOTH calls. Finalize asserts that
799
+ * the stored object's size equals the declared size — the presign binds
800
+ * ContentLength into the signature, so a mismatch means a different object was
801
+ * finalized than was declared. Reading the length twice from two places is
802
+ * exactly how that assertion starts failing for no reason.
803
+ */
804
+ async function uploadWorldSource(api, worldId, bytes) {
805
+ const size = bytes.byteLength;
806
+ const ticket = await api.requestItem('POST', `/api/v1/instant-worlds/${worldId}/source`, { contentType: source_archive_1.SOURCE_CONTENT_TYPE, size });
807
+ // contentType and cacheControl come back from the ticket, not from our
808
+ // constants: both are bound into the presigned signature, so the PUT has to
809
+ // echo the server's values rather than assert its own.
810
+ await (0, api_1.uploadToTicket)(ticket.url, bytes, ticket.contentType, ticket.cacheControl);
811
+ return api.requestItem('POST', `/api/v1/instant-worlds/${worldId}/source/finalize`, { key: ticket.key, size });
812
+ }
813
+ /**
814
+ * One plain sentence for a source-channel failure — never a stack trace.
815
+ *
816
+ * The case this exists for: a deployment with no source bucket answers 503 with
817
+ * a message naming the missing variable. That is operational information, and a
818
+ * creator should read it as a sentence, not as an `✖ Service Unavailable (503)`
819
+ * block stapled onto an otherwise successful publish. Pure, so every shape can
820
+ * be asserted without a server.
821
+ */
822
+ function describeSourceFailure(err) {
823
+ // ApiError's `message` is already the server's own message list, joined, and
824
+ // it falls back to `HTTP <status>` when the body carried none — so there is no
825
+ // empty case to guard and no reason to special-case ApiError at all.
826
+ return err instanceof Error ? err.message : String(err);
827
+ }
828
+ /**
829
+ * The website host a creator would edit this world on, for the environment the
830
+ * credentials point at. Production reads `helixgame.com`, which is the string
831
+ * spec §9.3 writes out; staging and helix3 read their own hosts instead of
832
+ * pointing a staging creator at production. Same idiom `helix login` uses.
833
+ */
834
+ function editSiteHost(apiUrl) {
835
+ const webUrl = apiUrl === config_1.DEFAULT_API_URL ? config_1.DEFAULT_WEB_URL : (0, browserLogin_1.deriveWebUrl)(apiUrl);
836
+ try {
837
+ return new URL(webUrl).host;
838
+ }
839
+ catch {
840
+ return webUrl;
841
+ }
842
+ }
843
+ /**
844
+ * The single creator-facing line about source, per spec §9.3. A FACT, printed
845
+ * once — not a warning, not repeated.
846
+ *
847
+ * Lives here rather than in the CLI's command layer because MCP renders the
848
+ * same outcome to an agent and the two must not drift; `howToEnable` is the
849
+ * only part that differs (a CLI flag vs a tool argument).
850
+ */
851
+ function sourceOutcomeLine(outcome, apiUrl, howToEnable = '--upload-source') {
852
+ const site = editSiteHost(apiUrl);
853
+ if (outcome.state === 'uploaded') {
854
+ return `Source uploaded (${(0, source_archive_1.formatArchiveSize)(outcome.sizeBytes)}). Editable at ${site}/create.`;
855
+ }
856
+ if (outcome.state === 'failed') {
857
+ return `Source was NOT uploaded: ${outcome.message} The world published fine; it is not editable on ${site} until source uploads.`;
858
+ }
859
+ return `Source not uploaded. Pass ${howToEnable} to enable editing this world on ${site}.`;
860
+ }
861
+ const MEDIA_CONTENT_TYPES = {
862
+ '.png': 'image/png',
863
+ '.jpg': 'image/jpeg',
864
+ '.jpeg': 'image/jpeg',
865
+ '.webp': 'image/webp',
866
+ '.avif': 'image/avif',
867
+ '.gif': 'image/gif',
868
+ };
869
+ const THUMBNAIL_MAX_BYTES = 8 * 1024 * 1024;
870
+ const PREVIEW_MAX_BYTES = 32 * 1024 * 1024;
871
+ // Content type from file extension — png/jpg/jpeg/webp only. Pure/testable without touching disk.
872
+ function mediaContentTypeFromExtension(file) {
873
+ const ext = (0, node_path_1.extname)(file).toLowerCase();
874
+ const contentType = MEDIA_CONTENT_TYPES[ext];
875
+ if (!contentType)
876
+ throw new Error(`unsupported media file type "${ext || file}" — use png, jpg/jpeg, webp, avif, or gif`);
877
+ return contentType;
878
+ }
879
+ function findBundleThumbnail(root) {
880
+ for (const ext of Object.keys(MEDIA_CONTENT_TYPES)) {
881
+ const candidate = (0, node_path_1.join)(root, `thumbnail${ext}`);
882
+ if ((0, node_fs_1.existsSync)(candidate))
883
+ return candidate;
884
+ }
885
+ return undefined;
886
+ }
887
+ // Client-side size cap check — a friendlier failure than the server's 400 (world-media.ts:35-36).
888
+ function assertMediaSizeOk(size, kind) {
889
+ const max = kind === 'preview' ? PREVIEW_MAX_BYTES : THUMBNAIL_MAX_BYTES;
890
+ if (size > max) {
891
+ throw new Error(`file is ${(size / 1024 / 1024).toFixed(1)} MiB — the ${kind} limit is ${(max / 1024 / 1024).toFixed(0)} MiB`);
892
+ }
893
+ }
894
+ // Anti-churn gate: an occupied slot refuses without an explicit --overwrite. Pure/testable —
895
+ // no HTTP — so every slot/overwrite combination is covered without mocking the API.
896
+ function assertMediaSlotWritable(world, kind, overwrite) {
897
+ const occupied = kind === 'thumbnail' ? world.hasCustomThumbnail : world.previewMediaUrl !== null;
898
+ if (!occupied || overwrite)
899
+ return;
900
+ const current = kind === 'thumbnail' ? world.thumbnailUrl : world.previewMediaUrl;
901
+ throw new Error(`The ${kind} slot is already set (${current}) — pass --overwrite to replace it (an explicit human decision, never automatic).`);
902
+ }
903
+ // Resolve the world (gate on the occupied-slot check) -> presign -> PUT -> finalize. Throws a clear
904
+ // Error on a refused slot, unsupported file type, oversize file, or any ApiError from the server.
905
+ async function setWorldMedia(slug, file, opts = {}) {
906
+ const creds = (0, config_1.loadCredentials)();
907
+ if (!creds)
908
+ throw new Error('Not logged in (or token expired). Run: helix login');
909
+ const api = api_1.HelixApi.forCredentials(creds);
910
+ return setWorldMediaWithApi(slug, file, api, opts);
911
+ }
912
+ async function setWorldMediaWithApi(slug, file, api, opts = {}) {
913
+ const kind = opts.kind ?? 'thumbnail';
914
+ const world = await api.requestItem('GET', `/api/v1/instant-worlds/${slug}`);
915
+ assertMediaSlotWritable(world, kind, opts.overwrite ?? false);
916
+ const contentType = mediaContentTypeFromExtension(file);
917
+ const bytes = (0, node_fs_1.readFileSync)(file);
918
+ assertMediaSizeOk(bytes.byteLength, kind);
919
+ const ticket = await api.requestItem('POST', `/api/v1/instant-worlds/${world.id}/media/upload`, {
920
+ contentType,
921
+ size: bytes.byteLength,
922
+ kind,
923
+ });
924
+ await (0, api_1.uploadToTicket)(ticket.url, bytes, ticket.contentType, ticket.cacheControl);
925
+ return api.requestItem('POST', `/api/v1/instant-worlds/${world.id}/media/finalize`, {
926
+ key: ticket.key,
927
+ kind,
928
+ });
929
+ }
930
+ // Clear a media slot back to the generated placeholder.
931
+ async function clearWorldMedia(slug, kind) {
932
+ const creds = (0, config_1.loadCredentials)();
933
+ if (!creds)
934
+ throw new Error('Not logged in (or token expired). Run: helix login');
935
+ const api = api_1.HelixApi.forCredentials(creds);
936
+ const world = await api.requestItem('GET', `/api/v1/instant-worlds/${slug}`);
937
+ return api.requestItem('DELETE', `/api/v1/instant-worlds/${world.id}/media?kind=${kind}`);
938
+ }
939
+ // New asset publication uses the sealed Package-first API in publications.ts.
940
+ var publications_1 = require("./publications");
941
+ Object.defineProperty(exports, "publishGlb", { enumerable: true, get: function () { return publications_1.publishGlb; } });
942
+ Object.defineProperty(exports, "makeItemFromPackage", { enumerable: true, get: function () { return publications_1.makeItemFromPackage; } });
943
+ Object.defineProperty(exports, "publishOwnedItemFromPackage", { enumerable: true, get: function () { return publications_1.publishOwnedItemFromPackage; } });
944
+ Object.defineProperty(exports, "PUBLICATIONS_UPLOAD_PATH", { enumerable: true, get: function () { return publications_1.PUBLICATIONS_UPLOAD_PATH; } });
945
+ Object.defineProperty(exports, "ITEMS_FROM_PACKAGE_PATH", { enumerable: true, get: function () { return publications_1.ITEMS_FROM_PACKAGE_PATH; } });
946
+ /**
947
+ * Delist a published universal item you own (CH-1671). Existing owners keep
948
+ * what they own; the item stops appearing on browse/marketplace and can no
949
+ * longer be newly acquired. This does NOT delete anything — `helix item
950
+ * publish` never made a delete path safe once anyone (including your own
951
+ * auto-granted copy) owns an instance, and delist is the actual way out.
952
+ * Only legal from a currently-published item; the server rejects a draft or
953
+ * an already-delisted one with a clear error (surfaced as ApiError).
954
+ */
955
+ async function delistItem(itemId, creds, opts = {}, deps = {}) {
956
+ const api = deps.api ?? api_1.HelixApi.forCredentials(creds);
957
+ const body = opts.reason !== undefined ? { reason: opts.reason } : undefined;
958
+ const item = await api.requestItem('POST', `/api/v1/universal-items/${itemId}/delist`, body);
959
+ return item;
960
+ }
961
+ // --- Achievements -----------------------------------------------------------
962
+ //
963
+ // A world's achievement registry lives OUTSIDE the bundle: `helix.json` cannot
964
+ // declare one, and `helix publish` cannot check that a key exists — so a rule
965
+ // awarding an unregistered key publishes clean and no-ops at runtime. That is
966
+ // why these commands exist at all: registration was API/website-only, which put
967
+ // it out of reach of an agent building the world.
968
+ //
969
+ // Registration is ONE multipart round trip (text fields + a required 2D icon +
970
+ // an optional GLB trophy) and mints the soulbound item behind the badge. The
971
+ // world is addressed by SLUG here — the API is keyed by uuid, but a creator (and
972
+ // an agent that just published) knows the slug.
973
+ const achievementsWorldPath = (worldId) => `/api/v1/achievements/worlds/${worldId}`;
974
+ exports.achievementsWorldPath = achievementsWorldPath;
975
+ /**
976
+ * Everything `--dry-run` checks: the field rules, both files read and sniffed,
977
+ * and the icon proven to be a real, non-blank graphic. No network and no login,
978
+ * so an agent can verify a registration before asking a human to sign in.
979
+ */
980
+ async function planAchievementRegistration(opts) {
981
+ const { fields, warnings } = (0, achievement_1.buildAchievementRegistration)(opts);
982
+ if (!opts.icon)
983
+ throw new Error('an achievement needs its 2D graphic — pass --icon <file>');
984
+ if (!(0, node_fs_1.existsSync)(opts.icon))
985
+ throw new Error(`icon file not found: ${opts.icon}`);
986
+ const iconContentType = (0, achievement_1.iconContentTypeFromExtension)(opts.icon);
987
+ const iconBytes = (0, node_fs_1.readFileSync)(opts.icon);
988
+ await (0, achievement_1.assertIconLooksReal)(iconBytes, opts.icon);
989
+ if (iconBytes.byteLength > achievement_1.ACHIEVEMENT_ICON_MAX_BYTES) {
990
+ throw new Error(`icon is ${(iconBytes.byteLength / 1024 / 1024).toFixed(1)} MiB — the limit is ${achievement_1.ACHIEVEMENT_ICON_MAX_BYTES / 1024 / 1024} MiB`);
991
+ }
992
+ let trophy = null;
993
+ let trophyBytes = null;
994
+ if (opts.trophy) {
995
+ if (!(0, node_fs_1.existsSync)(opts.trophy))
996
+ throw new Error(`trophy file not found: ${opts.trophy}`);
997
+ const trophyContentType = (0, item_1.meshContentTypeFromExtension)(opts.trophy);
998
+ trophyBytes = (0, node_fs_1.readFileSync)(opts.trophy);
999
+ (0, item_1.assertLooksLikeGlb)(trophyBytes, opts.trophy);
1000
+ if (trophyBytes.byteLength > achievement_1.ACHIEVEMENT_TROPHY_MAX_BYTES) {
1001
+ throw new Error(`trophy is ${(trophyBytes.byteLength / 1024 / 1024).toFixed(1)} MiB — the limit is ${achievement_1.ACHIEVEMENT_TROPHY_MAX_BYTES / 1024 / 1024} MiB`);
1002
+ }
1003
+ trophy = { file: opts.trophy, contentType: trophyContentType, sizeBytes: trophyBytes.byteLength };
1004
+ }
1005
+ else {
1006
+ warnings.push('no --trophy given; the backend bakes your icon onto the default plaque so the badge is still placeable in a home.');
1007
+ }
1008
+ return {
1009
+ worldSlug: opts.worldSlug,
1010
+ fields,
1011
+ icon: { file: opts.icon, contentType: iconContentType, sizeBytes: iconBytes.byteLength },
1012
+ trophy,
1013
+ warnings,
1014
+ iconBytes,
1015
+ trophyBytes,
162
1016
  };
163
1017
  }
1018
+ const filePart = (bytes, part) => [
1019
+ new Blob([new Uint8Array(bytes)], { type: part.contentType }),
1020
+ (0, node_path_1.basename)(part.file),
1021
+ ];
1022
+ /**
1023
+ * Register (and mint the soulbound item for) a world achievement. Validate
1024
+ * locally → resolve the slug → one multipart POST. Throws ApiError
1025
+ * (render()-able) on any server rejection — a duplicate key included.
1026
+ */
1027
+ async function registerAchievement(opts, creds, deps = {}) {
1028
+ const plan = await planAchievementRegistration(opts);
1029
+ const onProgress = deps.onProgress ?? (() => undefined);
1030
+ const api = deps.api ?? api_1.HelixApi.forCredentials(creds);
1031
+ const world = await ownedWorldBySlug(api, opts.worldSlug);
1032
+ const form = new FormData();
1033
+ form.append('key', plan.fields.key);
1034
+ form.append('name', plan.fields.name);
1035
+ if (plan.fields.description !== undefined)
1036
+ form.append('description', plan.fields.description);
1037
+ if (plan.fields.points !== undefined)
1038
+ form.append('points', String(plan.fields.points));
1039
+ if (plan.fields.hidden !== undefined)
1040
+ form.append('hidden', String(plan.fields.hidden));
1041
+ form.append('unlockMode', plan.fields.unlockMode);
1042
+ // The nested criteria rides as a JSON STRING: multipart has no object field,
1043
+ // and the backend's DTO re-instantiates it from exactly this shape.
1044
+ if (plan.fields.criteria)
1045
+ form.append('criteria', JSON.stringify(plan.fields.criteria));
1046
+ form.append('image', ...filePart(plan.iconBytes, plan.icon));
1047
+ if (plan.trophy && plan.trophyBytes)
1048
+ form.append('mesh', ...filePart(plan.trophyBytes, plan.trophy));
1049
+ onProgress(`Registering "${plan.fields.key}" on ${world.slug} (${(plan.icon.sizeBytes / 1024).toFixed(1)} KiB icon)`);
1050
+ const achievement = await api.sendMultipart('POST', (0, exports.achievementsWorldPath)(world.id), form);
1051
+ return { achievement, warnings: plan.warnings };
1052
+ }
1053
+ /** Every achievement registered to a world, newest rollup data included. */
1054
+ async function listAchievements(worldSlug, creds, deps = {}) {
1055
+ const api = deps.api ?? api_1.HelixApi.forCredentials(creds);
1056
+ const world = await ownedWorldBySlug(api, worldSlug);
1057
+ return api.request('GET', (0, exports.achievementsWorldPath)(world.id));
1058
+ }
1059
+ /**
1060
+ * Resolve a world-scoped `key` to the item id every mutation route is keyed by.
1061
+ * A creator (and every rule in their manifest) names the key; the uuid is an
1062
+ * implementation detail they should never have to carry.
1063
+ */
1064
+ async function achievementByKey(api, worldSlug, key) {
1065
+ const world = await ownedWorldBySlug(api, worldSlug);
1066
+ const rows = await api.request('GET', (0, exports.achievementsWorldPath)(world.id));
1067
+ const wanted = key.trim().toLowerCase();
1068
+ const found = rows.find((a) => a.key === wanted);
1069
+ if (!found) {
1070
+ const known = rows.map((a) => a.key).join(', ') || '(none registered yet)';
1071
+ throw new Error(`No achievement with key "${wanted}" on world "${worldSlug}". Registered keys: ${known}`);
1072
+ }
1073
+ return found;
1074
+ }
1075
+ /**
1076
+ * Patch a registered achievement. `key`, `unlockMode` and `criteria` are NOT
1077
+ * patchable by design — a key is the identifier rules name, and re-declaring
1078
+ * how a badge is earned would silently re-label every copy already granted.
1079
+ */
1080
+ async function updateAchievement(worldSlug, key, patch, creds, deps = {}) {
1081
+ const body = (0, achievement_1.buildAchievementUpdate)(patch);
1082
+ const api = deps.api ?? api_1.HelixApi.forCredentials(creds);
1083
+ const target = await achievementByKey(api, worldSlug, key);
1084
+ return api.request('PATCH', `/api/v1/achievements/${target.id}`, body);
1085
+ }
1086
+ /**
1087
+ * Replace the 2D graphic. This endpoint exists because creators were driving the
1088
+ * generic universal-items presign route instead, which SUSPENDS the achievement;
1089
+ * it also re-bakes the default plaque, so the change reaches the 3D badge too.
1090
+ */
1091
+ async function setAchievementIcon(worldSlug, key, file, creds, deps = {}) {
1092
+ if (!(0, node_fs_1.existsSync)(file))
1093
+ throw new Error(`icon file not found: ${file}`);
1094
+ const contentType = (0, achievement_1.iconContentTypeFromExtension)(file);
1095
+ const bytes = (0, node_fs_1.readFileSync)(file);
1096
+ await (0, achievement_1.assertIconLooksReal)(bytes, file);
1097
+ if (bytes.byteLength > achievement_1.ACHIEVEMENT_ICON_MAX_BYTES) {
1098
+ throw new Error(`icon is ${(bytes.byteLength / 1024 / 1024).toFixed(1)} MiB — the limit is ${achievement_1.ACHIEVEMENT_ICON_MAX_BYTES / 1024 / 1024} MiB`);
1099
+ }
1100
+ const api = deps.api ?? api_1.HelixApi.forCredentials(creds);
1101
+ const target = await achievementByKey(api, worldSlug, key);
1102
+ const form = new FormData();
1103
+ form.append('image', ...filePart(bytes, { file, contentType, sizeBytes: bytes.byteLength }));
1104
+ return api.sendMultipart('PUT', `/api/v1/achievements/${target.id}/icon`, form);
1105
+ }
1106
+ // --- Universal-item distributions ------------------------------------------
1107
+ exports.ITEM_DISTRIBUTIONS_PATH = '/api/v1/item-distributions';
1108
+ exports.ITEM_DISTRIBUTIONS_CREATOR_PATH = `${exports.ITEM_DISTRIBUTIONS_PATH}/creator`;
1109
+ /** A route is a Claim (free) when the server says so or its price is 0; the price may arrive as a number or a decimal
1110
+ * string, so `=== 0` alone mislabels a free route "Buy". */
1111
+ function isClaimRoute(d) {
1112
+ if (d.isFree === true)
1113
+ return true;
1114
+ if (d.priceLix === null || d.priceLix === undefined || d.priceLix === '')
1115
+ return false;
1116
+ return Number(d.priceLix) === 0;
1117
+ }
1118
+ /** First line of `helix item distribution create`. `requestedPriceLix` backs up a response that omits the price. */
1119
+ function distributionCreatedHeadline(created, requestedPriceLix) {
1120
+ const claim = isClaimRoute(created) || ((created.priceLix === undefined || created.priceLix === null) && requestedPriceLix === 0);
1121
+ return claim ? '✔ Created Claim route (free).' : '✔ Created Buy route.';
1122
+ }
1123
+ const unwrapDistribution = (response) => 'item' in response ? response.item : response;
1124
+ /** Resolve an optional creator world slug, then create one canonical route. */
1125
+ async function createItemDistribution(options, creds, deps = {}) {
1126
+ const api = deps.api ?? api_1.HelixApi.forCredentials(creds);
1127
+ let fields = (0, distribution_1.buildItemDistribution)(options);
1128
+ if (fields.worldSlug) {
1129
+ const world = await ownedWorldBySlug(api, fields.worldSlug);
1130
+ const { worldSlug: _worldSlug, ...withoutSlug } = fields;
1131
+ fields = { ...withoutSlug, worldId: world.id };
1132
+ }
1133
+ // Derived AFTER slug resolution so the idempotency key covers the worldId
1134
+ // the server will actually store, not the slug the caller typed.
1135
+ const body = {
1136
+ intentId: options.intentId ?? (0, distribution_1.distributionIntentId)(fields),
1137
+ ...fields,
1138
+ };
1139
+ deps.onProgress?.(`${fields.priceLix === 0 ? 'Creating Claim' : 'Creating Buy'} distribution for ${options.itemId}`);
1140
+ const response = await api.request('POST', exports.ITEM_DISTRIBUTIONS_PATH, body);
1141
+ return unwrapDistribution(response);
1142
+ }
1143
+ async function listItemDistributions(itemId, creds, deps = {}) {
1144
+ const api = deps.api ?? api_1.HelixApi.forCredentials(creds);
1145
+ const response = await api.request('GET', `${exports.ITEM_DISTRIBUTIONS_CREATOR_PATH}?itemId=${encodeURIComponent(itemId)}`);
1146
+ if (Array.isArray(response))
1147
+ return response;
1148
+ return response.distributions ?? response.data ?? [];
1149
+ }
1150
+ async function updateItemDistribution(distributionId, input, creds, deps = {}) {
1151
+ const api = deps.api ?? api_1.HelixApi.forCredentials(creds);
1152
+ const patch = (0, distribution_1.buildItemDistributionUpdate)(input);
1153
+ const response = await api.request('PATCH', `${exports.ITEM_DISTRIBUTIONS_PATH}/${distributionId}`, patch);
1154
+ return unwrapDistribution(response);
1155
+ }
1156
+ async function disableItemDistribution(distributionId, creds, deps = {}) {
1157
+ const api = deps.api ?? api_1.HelixApi.forCredentials(creds);
1158
+ const owned = await api.request('GET', exports.ITEM_DISTRIBUTIONS_CREATOR_PATH);
1159
+ const rows = Array.isArray(owned) ? owned : owned.distributions ?? owned.data ?? [];
1160
+ const current = rows.find((entry) => entry.id === distributionId);
1161
+ if (!current || !current.updatedAt || !Number.isFinite(Date.parse(current.updatedAt))) {
1162
+ throw new Error('Cannot disable distribution without its current creator-owned revision');
1163
+ }
1164
+ // One optimistic write: a conflict must reach the caller, never trigger a
1165
+ // blind retry against a newer policy another editor just saved.
1166
+ const response = await api.request('POST', `${exports.ITEM_DISTRIBUTIONS_PATH}/${distributionId}/disable`, { expectedUpdatedAt: current.updatedAt });
1167
+ return unwrapDistribution(response);
1168
+ }
1169
+ // --- In-world products ------------------------------------------------------
1170
+ //
1171
+ // A world's product registry is what `Helix.purchase` sells: the shell holds the
1172
+ // player's session, renders the confirm popup and settles server-side, so a
1173
+ // world can only sell what a CREATOR registered here first. Registration was
1174
+ // API/website-only, which put monetizing a world out of reach of the agent that
1175
+ // built it — that is the gap these commands close.
1176
+ //
1177
+ // ORDERING: registration needs the world ROW to exist and be owned, NOT a
1178
+ // Published status — `helix world create` mints that row before any build, and
1179
+ // `helix product list <slug>` reads a Draft world's registry. Only the no-slug
1180
+ // creator listing (`GET creator/worlds`) filters to Published.
1181
+ //
1182
+ // The world is addressed by SLUG here — the API is keyed by uuid, but a creator
1183
+ // (and an agent that just published) knows the slug.
1184
+ exports.PRODUCTS_PATH = '/api/v1/iwp/products';
1185
+ exports.CREATOR_WORLDS_PATH = '/api/v1/iwp/creator/worlds';
1186
+ const productsWorldPath = (worldId) => `${exports.CREATOR_WORLDS_PATH}/${worldId}/products`;
1187
+ exports.productsWorldPath = productsWorldPath;
1188
+ /**
1189
+ * Everything `--dry-run` checks: the field rules and the type/item coherence.
1190
+ * No network and no login, so an agent can verify a registration before asking
1191
+ * a human to sign in.
1192
+ */
1193
+ function planProductRegistration(opts) {
1194
+ const { fields, warnings } = (0, product_1.buildProductRegistration)(opts);
1195
+ return { worldSlug: opts.worldSlug, fields, warnings };
1196
+ }
1197
+ /**
1198
+ * Register a purchasable product on a world: validate locally → resolve the slug
1199
+ * → one JSON POST. Throws ApiError (render()-able) on any server rejection — a
1200
+ * duplicate key, an unpublished linked item, or a non-owned world included.
1201
+ */
1202
+ async function registerProduct(opts, creds, deps = {}) {
1203
+ const plan = planProductRegistration(opts);
1204
+ const onProgress = deps.onProgress ?? (() => undefined);
1205
+ const api = deps.api ?? api_1.HelixApi.forCredentials(creds);
1206
+ const world = await ownedWorldBySlug(api, opts.worldSlug);
1207
+ onProgress(`Registering "${plan.fields.title}" on ${world.slug} at ${plan.fields.priceLix} LIX`);
1208
+ const product = await api.request('POST', exports.PRODUCTS_PATH, { worldId: world.id, ...plan.fields });
1209
+ return { product, warnings: plan.warnings };
1210
+ }
1211
+ /** Every product registered to a world, active or not. */
1212
+ async function listProducts(worldSlug, creds, deps = {}) {
1213
+ const api = deps.api ?? api_1.HelixApi.forCredentials(creds);
1214
+ const world = await ownedWorldBySlug(api, worldSlug);
1215
+ const res = await api.request('GET', (0, exports.productsWorldPath)(world.id));
1216
+ return res.products ?? [];
1217
+ }
1218
+ /** Every PUBLISHED world of the caller's with its registry — the "where can I sell?" view. */
1219
+ async function listProductWorlds(creds, deps = {}) {
1220
+ const api = deps.api ?? api_1.HelixApi.forCredentials(creds);
1221
+ const res = await api.request('GET', exports.CREATOR_WORLDS_PATH);
1222
+ return res.worlds ?? [];
1223
+ }
1224
+ /**
1225
+ * Resolve a product within a world to the uuid every mutation route is keyed by.
1226
+ * `ref` is the creator's `key` — or the uuid itself, because a key is optional
1227
+ * and a keyless product has nothing else to name it by.
1228
+ */
1229
+ async function productByRef(api, worldSlug, ref) {
1230
+ const world = await ownedWorldBySlug(api, worldSlug);
1231
+ const res = await api.request('GET', (0, exports.productsWorldPath)(world.id));
1232
+ const rows = res.products ?? [];
1233
+ const wanted = ref.trim().toLowerCase();
1234
+ const found = rows.find((p) => p.id === ref.trim() || (p.key !== null && p.key === wanted));
1235
+ if (!found) {
1236
+ const known = rows.map((p) => p.key ?? `${p.title} (${p.id})`).join(', ') || '(none registered yet)';
1237
+ throw new Error(`No product with key or id "${ref}" on world "${worldSlug}". Registered products: ${known}`);
1238
+ }
1239
+ return found;
1240
+ }
1241
+ /**
1242
+ * Patch a registered product. `key` and `type` are NOT patchable by design — a
1243
+ * key is what world code buys (`pkey:<key>`), and changing what a purchase
1244
+ * hands over would re-label every copy already sold.
1245
+ */
1246
+ async function updateProduct(worldSlug, ref, patch, creds, deps = {}) {
1247
+ const body = (0, product_1.buildProductUpdate)(patch);
1248
+ const api = deps.api ?? api_1.HelixApi.forCredentials(creds);
1249
+ const target = await productByRef(api, worldSlug, ref);
1250
+ return api.request('PATCH', `${exports.PRODUCTS_PATH}/${target.id}`, body);
1251
+ }
1252
+ /**
1253
+ * Take a product off sale (or put it back). Deactivating is the only way to
1254
+ * retire one: the row stays, so past purchases and their grants still resolve.
1255
+ */
1256
+ async function setProductActive(worldSlug, ref, active, creds, deps = {}) {
1257
+ const api = deps.api ?? api_1.HelixApi.forCredentials(creds);
1258
+ const target = await productByRef(api, worldSlug, ref);
1259
+ return api.request('POST', `${exports.PRODUCTS_PATH}/${target.id}/active`, { active });
1260
+ }
164
1261
  // Validate the bundle → create the version (presigned tickets per code/asset
165
1262
  // channel) → upload → finalize. Admin-only on the server.
166
- async function publishPackage(root, creds, onProgress = () => undefined) {
167
- const validator = await (0, ability_1.loadVendoredValidator)();
1263
+ async function publishPackage(root, creds, onProgress = () => undefined, deps = {}) {
1264
+ const validator = deps.validator ?? (await (0, ability_1.loadVendoredValidator)());
168
1265
  const check = (0, package_1.checkPackageBundle)(root, validator);
169
1266
  if (check.errors.length || !check.envelope) {
170
1267
  throw new Error(`Bundle is invalid:\n${check.errors.map((e) => ` - ${e}`).join('\n')}`);
171
1268
  }
172
1269
  const envelope = check.envelope;
173
- const api = api_1.HelixApi.forCredentials(creds);
1270
+ const api = deps.api ?? api_1.HelixApi.forCredentials(creds);
1271
+ const files = check.files.map((file) => {
1272
+ const body = (0, node_fs_1.readFileSync)(file.absolutePath);
1273
+ return {
1274
+ ...file,
1275
+ body,
1276
+ checksumSha256: (0, node_crypto_1.createHash)('sha256').update(body).digest('hex'),
1277
+ };
1278
+ });
174
1279
  onProgress(`Publishing ${envelope.kind} "${envelope.title}" (${envelope.slug}@${envelope.version}) — ${check.files.length} files`);
175
1280
  const created = await api.requestItem('POST', `/api/v1/instant-packages/${envelope.slug}/versions`, {
176
1281
  manifest: envelope,
177
1282
  payload: check.payload ?? undefined,
178
- files: check.files.map((f) => ({ path: f.path, size: f.size })),
1283
+ files: files.map((f) => ({
1284
+ path: f.path,
1285
+ size: f.size,
1286
+ checksumSha256: f.checksumSha256,
1287
+ })),
179
1288
  });
1289
+ if (created.status === 'active' && created.uploads.length === 0) {
1290
+ onProgress('Already active with the same verified checksum — no-op');
1291
+ return api.requestItem('GET', `/api/v1/instant-packages/${envelope.slug}/versions/${encodeURIComponent(envelope.version)}`);
1292
+ }
180
1293
  let done = 0;
181
1294
  const queue = [...created.uploads];
182
1295
  await Promise.all(Array.from({ length: UPLOAD_CONCURRENCY }, async () => {
183
1296
  for (let ticket = queue.shift(); ticket; ticket = queue.shift()) {
184
- const file = check.files.find((f) => f.path === ticket.path);
185
- await (0, api_1.uploadToTicket)(ticket.url, (0, node_fs_1.readFileSync)(file.absolutePath), ticket.contentType, ticket.cacheControl);
1297
+ const file = files.find((f) => f.path === ticket.path);
1298
+ await (deps.upload ?? api_1.uploadToTicket)(ticket.url, file.body, ticket.contentType, ticket.cacheControl);
186
1299
  done += 1;
187
1300
  onProgress(`Uploaded ${done}/${created.uploads.length}`);
188
1301
  }
@@ -196,8 +1309,19 @@ async function publishPackage(root, creds, onProgress = () => undefined) {
196
1309
  revision: final.revision,
197
1310
  codeBaseUrl: final.codeBaseUrl,
198
1311
  assetBaseUrl: final.assetBaseUrl,
1312
+ checksumSha256: final.checksumSha256,
199
1313
  };
200
1314
  }
1315
+ async function publishInteractable(root, creds, onProgress = () => undefined, deps = {}) {
1316
+ const published = await (deps.publishPackage ?? publishPackage)(root, creds, onProgress, deps);
1317
+ if (published.kind !== 'interactable' || !published.checksumSha256) {
1318
+ throw new Error(`publish-interactable requires an interactable bundle with a verified checksum; got ${published.kind}`);
1319
+ }
1320
+ const api = deps.api ?? api_1.HelixApi.forCredentials(creds);
1321
+ onProgress('Linking the official free Marketplace item');
1322
+ const linked = await api.request('POST', `/api/v1/instant-packages/${published.slug}/versions/${encodeURIComponent(published.version)}/product`);
1323
+ return { ...published, ...linked };
1324
+ }
201
1325
  // Public discovery — no auth. List published systems/abilities/asset-packs.
202
1326
  function listPackages(apiUrl, kind, system) {
203
1327
  const api = new api_1.HelixApi(apiUrl);
@@ -244,7 +1368,8 @@ async function ownedWorldBySlug(api, slug) {
244
1368
  const world = mine.data.find((w) => w.slug === slug);
245
1369
  if (!world) {
246
1370
  const known = mine.data.map((w) => w.slug).join(', ') || '(none)';
247
- throw new Error(`No world of yours has the slug "${slug}". Your worlds: ${known}`);
1371
+ throw new Error(`No world of yours has the slug "${slug}". Your worlds: ${known}. ` +
1372
+ `Run 'helix world create --slug ${slug} --title <title>' first.`);
248
1373
  }
249
1374
  return world;
250
1375
  }
@@ -407,4 +1532,42 @@ async function checkForUpdates(opts = {}) {
407
1532
  return { name: registryName, installed, latest, status, updateHint };
408
1533
  }));
409
1534
  }
1535
+ var doctor_1 = require("./unreal/doctor");
1536
+ Object.defineProperty(exports, "runUnrealDoctor", { enumerable: true, get: function () { return doctor_1.runUnrealDoctor; } });
1537
+ Object.defineProperty(exports, "locateEditorCmd", { enumerable: true, get: function () { return doctor_1.locateEditorCmd; } });
1538
+ Object.defineProperty(exports, "findUProject", { enumerable: true, get: function () { return doctor_1.findUProject; } });
1539
+ Object.defineProperty(exports, "DOCTOR_REPORT_SCHEMA", { enumerable: true, get: function () { return doctor_1.DOCTOR_REPORT_SCHEMA; } });
1540
+ var itemThumbnail_1 = require("./itemThumbnail");
1541
+ Object.defineProperty(exports, "refreshItemThumbnail", { enumerable: true, get: function () { return itemThumbnail_1.refreshItemThumbnail; } });
1542
+ Object.defineProperty(exports, "setItemThumbnail", { enumerable: true, get: function () { return itemThumbnail_1.setItemThumbnail; } });
1543
+ Object.defineProperty(exports, "describeThumbnailError", { enumerable: true, get: function () { return itemThumbnail_1.describeThumbnailError; } });
1544
+ Object.defineProperty(exports, "renderItemThumbnailResult", { enumerable: true, get: function () { return itemThumbnail_1.renderItemThumbnailResult; } });
1545
+ Object.defineProperty(exports, "MAX_ITEM_THUMBNAIL_BYTES", { enumerable: true, get: function () { return itemThumbnail_1.MAX_ITEM_THUMBNAIL_BYTES; } });
1546
+ var foliageLods_1 = require("./placements/foliageLods");
1547
+ Object.defineProperty(exports, "bakeFoliageLods", { enumerable: true, get: function () { return foliageLods_1.bakeFoliageLods; } });
1548
+ var attachFoliageLods_1 = require("./placements/attachFoliageLods");
1549
+ Object.defineProperty(exports, "attachFoliageLods", { enumerable: true, get: function () { return attachFoliageLods_1.attachFoliageLods; } });
1550
+ var scene_1 = require("./sceneHlod/scene");
1551
+ Object.defineProperty(exports, "bakeSceneHlod", { enumerable: true, get: function () { return scene_1.bakeSceneHlod; } });
1552
+ Object.defineProperty(exports, "inspectSceneHlod", { enumerable: true, get: function () { return scene_1.inspectSceneHlod; } });
1553
+ Object.defineProperty(exports, "tagSceneHlod", { enumerable: true, get: function () { return scene_1.tagSceneHlod; } });
1554
+ Object.defineProperty(exports, "planSceneHlod", { enumerable: true, get: function () { return scene_1.planSceneHlod; } });
1555
+ Object.defineProperty(exports, "DEFAULT_HLOD_LAYER", { enumerable: true, get: function () { return scene_1.DEFAULT_HLOD_LAYER; } });
1556
+ Object.defineProperty(exports, "HLOD_BAKER_VERSION", { enumerable: true, get: function () { return scene_1.HLOD_BAKER_VERSION; } });
1557
+ var bakeSurface_1 = require("./sceneHlod/bakeSurface");
1558
+ Object.defineProperty(exports, "bakeHlodSurface", { enumerable: true, get: function () { return bakeSurface_1.bakeHlodSurface; } });
1559
+ var approximate_1 = require("./sceneHlod/approximate");
1560
+ Object.defineProperty(exports, "approximateHlodGeometry", { enumerable: true, get: function () { return approximate_1.approximateHlodGeometry; } });
1561
+ var sharedAtlas_1 = require("./sceneHlod/sharedAtlas");
1562
+ Object.defineProperty(exports, "planSharedHlodAtlas", { enumerable: true, get: function () { return sharedAtlas_1.planSharedHlodAtlas; } });
1563
+ Object.defineProperty(exports, "bakeSharedHlodAtlas", { enumerable: true, get: function () { return sharedAtlas_1.bakeSharedHlodAtlas; } });
1564
+ var cellArtifact_1 = require("./sceneHlod/cellArtifact");
1565
+ Object.defineProperty(exports, "writeHlodCellGlb", { enumerable: true, get: function () { return cellArtifact_1.writeHlodCellGlb; } });
1566
+ Object.defineProperty(exports, "writeSharedHlodMaterialGlb", { enumerable: true, get: function () { return cellArtifact_1.writeSharedHlodMaterialGlb; } });
1567
+ var complete_1 = require("./sceneHlod/complete");
1568
+ Object.defineProperty(exports, "bakeCompleteSceneHlod", { enumerable: true, get: function () { return complete_1.bakeCompleteSceneHlod; } });
1569
+ Object.defineProperty(exports, "DEFAULT_COMPLETE_HLOD_SETTINGS", { enumerable: true, get: function () { return complete_1.DEFAULT_COMPLETE_HLOD_SETTINGS; } });
1570
+ var refinement_1 = require("./sceneHlod/refinement");
1571
+ Object.defineProperty(exports, "bakeSceneHlodRefinements", { enumerable: true, get: function () { return refinement_1.bakeSceneHlodRefinements; } });
1572
+ Object.defineProperty(exports, "DEFAULT_HLOD_REFINEMENT_SETTINGS", { enumerable: true, get: function () { return refinement_1.DEFAULT_HLOD_REFINEMENT_SETTINGS; } });
410
1573
  //# sourceMappingURL=lib.js.map