@playdrop/playdrop-cli 0.16.2 → 0.16.11

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 (383) hide show
  1. package/bin/playdrop +1 -2
  2. package/config/client-meta.json +4 -4
  3. package/dist/apiClient.d.ts +2 -2
  4. package/dist/apiClient.js +16 -20
  5. package/dist/appUrls.d.ts +2 -2
  6. package/dist/appUrls.js +31 -33
  7. package/dist/apps/build.d.ts +2 -2
  8. package/dist/apps/build.js +83 -83
  9. package/dist/apps/index.d.ts +7 -7
  10. package/dist/apps/index.js +8 -8
  11. package/dist/apps/loadCheck.d.ts +28 -16
  12. package/dist/apps/loadCheck.js +411 -279
  13. package/dist/apps/registration.d.ts +3 -3
  14. package/dist/apps/registration.js +1 -1
  15. package/dist/apps/staticHtml.d.ts +3 -3
  16. package/dist/apps/staticHtml.js +90 -91
  17. package/dist/apps/surfaceProfiles.d.ts +2 -2
  18. package/dist/apps/surfaceProfiles.js +6 -6
  19. package/dist/apps/upload.d.ts +5 -5
  20. package/dist/apps/upload.js +75 -81
  21. package/dist/apps/validate.d.ts +2 -2
  22. package/dist/apps/validate.js +18 -22
  23. package/dist/assetSpecs.d.ts +2 -2
  24. package/dist/assetSpecs.js +35 -35
  25. package/dist/assets/model-artifacts.d.ts +1 -1
  26. package/dist/assets/model-artifacts.js +81 -77
  27. package/dist/assets/model-worker.d.ts +1 -1
  28. package/dist/assets/model-worker.js +6 -6
  29. package/dist/browser.js +9 -9
  30. package/dist/catalogue-utils.d.ts +1 -1
  31. package/dist/catalogue-utils.js +26 -26
  32. package/dist/catalogue.d.ts +21 -16
  33. package/dist/catalogue.js +509 -413
  34. package/dist/clientInfo.d.ts +1 -1
  35. package/dist/clientInfo.js +28 -28
  36. package/dist/commandContext.d.ts +5 -5
  37. package/dist/commandContext.js +19 -23
  38. package/dist/commands/accounts.js +6 -6
  39. package/dist/commands/ads.js +16 -16
  40. package/dist/commands/agents.d.ts +2 -2
  41. package/dist/commands/agents.js +131 -127
  42. package/dist/commands/boosts.js +41 -31
  43. package/dist/commands/browse.d.ts +2 -2
  44. package/dist/commands/browse.js +168 -128
  45. package/dist/commands/build.js +9 -9
  46. package/dist/commands/captureListing.d.ts +8 -8
  47. package/dist/commands/captureListing.js +292 -332
  48. package/dist/commands/changelog.js +1 -1
  49. package/dist/commands/chat.js +51 -53
  50. package/dist/commands/check.d.ts +1 -1
  51. package/dist/commands/check.js +44 -44
  52. package/dist/commands/clients.d.ts +3 -3
  53. package/dist/commands/clients.js +67 -64
  54. package/dist/commands/comments.js +36 -29
  55. package/dist/commands/create.js +305 -312
  56. package/dist/commands/createRemixContent.d.ts +1 -1
  57. package/dist/commands/createRemixContent.js +65 -60
  58. package/dist/commands/creations.js +205 -135
  59. package/dist/commands/credits.js +37 -27
  60. package/dist/commands/detail.js +40 -34
  61. package/dist/commands/dev.js +103 -126
  62. package/dist/commands/devBrowser.js +74 -65
  63. package/dist/commands/devRuntimeAssets.d.ts +4 -4
  64. package/dist/commands/devRuntimeAssets.js +38 -40
  65. package/dist/commands/devServer.d.ts +4 -4
  66. package/dist/commands/devServer.js +183 -174
  67. package/dist/commands/devShared.d.ts +3 -3
  68. package/dist/commands/devShared.js +31 -31
  69. package/dist/commands/doctor.d.ts +5 -5
  70. package/dist/commands/doctor.js +63 -57
  71. package/dist/commands/documentation.js +42 -32
  72. package/dist/commands/feedback.js +59 -42
  73. package/dist/commands/format.js +9 -9
  74. package/dist/commands/generation.d.ts +2 -2
  75. package/dist/commands/generation.js +344 -326
  76. package/dist/commands/init.d.ts +4 -4
  77. package/dist/commands/init.js +64 -61
  78. package/dist/commands/login.d.ts +2 -2
  79. package/dist/commands/login.js +42 -62
  80. package/dist/commands/logout.js +4 -4
  81. package/dist/commands/marketing.d.ts +8 -8
  82. package/dist/commands/marketing.js +246 -297
  83. package/dist/commands/notes.js +19 -19
  84. package/dist/commands/notifications.js +34 -22
  85. package/dist/commands/npmProcess.js +3 -3
  86. package/dist/commands/ownedRuntimeImageValidation.d.ts +1 -1
  87. package/dist/commands/ownedRuntimeImageValidation.js +19 -17
  88. package/dist/commands/play.js +12 -21
  89. package/dist/commands/publicPages.js +8 -4
  90. package/dist/commands/review.js +123 -110
  91. package/dist/commands/search.js +107 -88
  92. package/dist/commands/tags.js +10 -12
  93. package/dist/commands/taskCaptureSession.d.ts +3 -3
  94. package/dist/commands/taskCaptureSession.js +3 -3
  95. package/dist/commands/tweaks.js +25 -23
  96. package/dist/commands/upgrade.js +40 -31
  97. package/dist/commands/upload-content.d.ts +5 -5
  98. package/dist/commands/upload-content.js +130 -122
  99. package/dist/commands/upload-graph.d.ts +1 -1
  100. package/dist/commands/upload-graph.js +7 -11
  101. package/dist/commands/upload.d.ts +7 -7
  102. package/dist/commands/upload.js +196 -217
  103. package/dist/commands/validate.js +33 -32
  104. package/dist/commands/versionsBrowse.js +61 -51
  105. package/dist/commands/whoami.js +11 -14
  106. package/dist/commands/worker/archive-staging.d.ts +9 -0
  107. package/dist/commands/worker/archive-staging.js +257 -0
  108. package/dist/commands/worker/instrument-evidence.d.ts +1 -1
  109. package/dist/commands/worker/instrument-evidence.js +41 -43
  110. package/dist/commands/worker/provider-telemetry.d.ts +2 -1
  111. package/dist/commands/worker/provider-telemetry.js +181 -64
  112. package/dist/commands/worker/runtime.d.ts +18 -3
  113. package/dist/commands/worker/runtime.js +291 -239
  114. package/dist/commands/worker.d.ts +83 -22
  115. package/dist/commands/worker.js +1980 -1411
  116. package/dist/commands/workspaces.d.ts +2 -2
  117. package/dist/commands/workspaces.js +57 -57
  118. package/dist/config.js +23 -20
  119. package/dist/devAuth.d.ts +3 -3
  120. package/dist/devAuth.js +20 -17
  121. package/dist/environment.d.ts +1 -1
  122. package/dist/environment.js +34 -34
  123. package/dist/errors.d.ts +1 -1
  124. package/dist/errors.js +7 -7
  125. package/dist/externalAssetPackValidation.d.ts +1 -1
  126. package/dist/externalAssetPackValidation.js +9 -9
  127. package/dist/http.d.ts +1 -1
  128. package/dist/http.js +9 -9
  129. package/dist/index.js +657 -664
  130. package/dist/listingCaptureLease.js +23 -23
  131. package/dist/listingPreflight.d.ts +2 -2
  132. package/dist/listingPreflight.js +33 -33
  133. package/dist/messages.js +6 -14
  134. package/dist/output.js +9 -9
  135. package/dist/playwright.d.ts +1 -1
  136. package/dist/playwright.js +35 -40
  137. package/dist/proxyFetch.js +30 -27
  138. package/dist/recorderRelease.js +8 -8
  139. package/dist/refs.d.ts +5 -5
  140. package/dist/refs.js +40 -37
  141. package/dist/sessionCookie.js +15 -21
  142. package/dist/shellProbe.js +5 -5
  143. package/dist/taskSelection.d.ts +3 -3
  144. package/dist/taskSelection.js +67 -62
  145. package/dist/taskUtils.d.ts +1 -1
  146. package/dist/taskUtils.js +4 -4
  147. package/dist/tweakStaleness.d.ts +3 -3
  148. package/dist/tweakStaleness.js +8 -8
  149. package/dist/uploadLog.d.ts +3 -3
  150. package/dist/uploadLog.js +51 -51
  151. package/dist/versionCompare.js +3 -3
  152. package/dist/workerAppProject.d.ts +1 -1
  153. package/dist/workerAppProject.js +10 -17
  154. package/dist/workspaceAuth.d.ts +1 -1
  155. package/dist/workspaceAuth.js +28 -22
  156. package/node_modules/@playdrop/ai-client/dist/index.d.ts +35 -35
  157. package/node_modules/@playdrop/ai-client/dist/index.d.ts.map +1 -1
  158. package/node_modules/@playdrop/api-client/dist/client.d.ts +34 -33
  159. package/node_modules/@playdrop/api-client/dist/client.d.ts.map +1 -1
  160. package/node_modules/@playdrop/api-client/dist/core/errors.d.ts +1 -1
  161. package/node_modules/@playdrop/api-client/dist/core/errors.d.ts.map +1 -1
  162. package/node_modules/@playdrop/api-client/dist/core/request.d.ts +2 -2
  163. package/node_modules/@playdrop/api-client/dist/core/request.d.ts.map +1 -1
  164. package/node_modules/@playdrop/api-client/dist/domains/admin.d.ts +2 -2
  165. package/node_modules/@playdrop/api-client/dist/domains/admin.d.ts.map +1 -1
  166. package/node_modules/@playdrop/api-client/dist/domains/admin.js +4 -1
  167. package/node_modules/@playdrop/api-client/dist/domains/agent-tasks.d.ts +4 -3
  168. package/node_modules/@playdrop/api-client/dist/domains/agent-tasks.d.ts.map +1 -1
  169. package/node_modules/@playdrop/api-client/dist/domains/agent-tasks.js +12 -0
  170. package/node_modules/@playdrop/api-client/dist/domains/ai.d.ts +2 -2
  171. package/node_modules/@playdrop/api-client/dist/domains/ai.d.ts.map +1 -1
  172. package/node_modules/@playdrop/api-client/dist/domains/apps.d.ts +4 -4
  173. package/node_modules/@playdrop/api-client/dist/domains/apps.d.ts.map +1 -1
  174. package/node_modules/@playdrop/api-client/dist/domains/asset-packs.d.ts +4 -4
  175. package/node_modules/@playdrop/api-client/dist/domains/asset-packs.d.ts.map +1 -1
  176. package/node_modules/@playdrop/api-client/dist/domains/assets.d.ts +4 -4
  177. package/node_modules/@playdrop/api-client/dist/domains/assets.d.ts.map +1 -1
  178. package/node_modules/@playdrop/api-client/dist/domains/auth.d.ts +2 -2
  179. package/node_modules/@playdrop/api-client/dist/domains/auth.d.ts.map +1 -1
  180. package/node_modules/@playdrop/api-client/dist/domains/chat.d.ts +2 -2
  181. package/node_modules/@playdrop/api-client/dist/domains/chat.d.ts.map +1 -1
  182. package/node_modules/@playdrop/api-client/dist/domains/comments.d.ts +3 -3
  183. package/node_modules/@playdrop/api-client/dist/domains/comments.d.ts.map +1 -1
  184. package/node_modules/@playdrop/api-client/dist/domains/free-credits.d.ts +2 -2
  185. package/node_modules/@playdrop/api-client/dist/domains/free-credits.d.ts.map +1 -1
  186. package/node_modules/@playdrop/api-client/dist/domains/me.d.ts +2 -2
  187. package/node_modules/@playdrop/api-client/dist/domains/me.d.ts.map +1 -1
  188. package/node_modules/@playdrop/api-client/dist/domains/payments.d.ts +2 -2
  189. package/node_modules/@playdrop/api-client/dist/domains/payments.d.ts.map +1 -1
  190. package/node_modules/@playdrop/api-client/dist/domains/player-meta.d.ts +2 -2
  191. package/node_modules/@playdrop/api-client/dist/domains/player-meta.d.ts.map +1 -1
  192. package/node_modules/@playdrop/api-client/dist/domains/playtrade.d.ts +3 -3
  193. package/node_modules/@playdrop/api-client/dist/domains/playtrade.d.ts.map +1 -1
  194. package/node_modules/@playdrop/api-client/dist/domains/playtrade.js +2 -2
  195. package/node_modules/@playdrop/api-client/dist/domains/search.d.ts +2 -2
  196. package/node_modules/@playdrop/api-client/dist/domains/search.d.ts.map +1 -1
  197. package/node_modules/@playdrop/api-client/dist/domains/tags.d.ts +2 -2
  198. package/node_modules/@playdrop/api-client/dist/domains/tags.d.ts.map +1 -1
  199. package/node_modules/@playdrop/api-client/dist/index.d.ts +19 -18
  200. package/node_modules/@playdrop/api-client/dist/index.d.ts.map +1 -1
  201. package/node_modules/@playdrop/api-client/dist/index.js +7 -2
  202. package/node_modules/@playdrop/boxel-core/dist/src/entity-cleaner.d.ts +1 -1
  203. package/node_modules/@playdrop/boxel-core/dist/src/entity-cleaner.js +47 -47
  204. package/node_modules/@playdrop/boxel-core/dist/src/entity-cleaner.js.map +1 -1
  205. package/node_modules/@playdrop/boxel-core/dist/src/entity-utils.d.ts +3 -3
  206. package/node_modules/@playdrop/boxel-core/dist/src/entity-utils.js +32 -47
  207. package/node_modules/@playdrop/boxel-core/dist/src/entity-utils.js.map +1 -1
  208. package/node_modules/@playdrop/boxel-core/dist/src/format-utils.js +16 -18
  209. package/node_modules/@playdrop/boxel-core/dist/src/format-utils.js.map +1 -1
  210. package/node_modules/@playdrop/boxel-core/dist/src/humanoid/geometry.d.ts +2 -2
  211. package/node_modules/@playdrop/boxel-core/dist/src/humanoid/index.d.ts +4 -4
  212. package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r15/common.d.ts +1 -1
  213. package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r15/index.d.ts +3 -3
  214. package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r15/textured-builder.d.ts +2 -2
  215. package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r15/textured-builder.js +44 -45
  216. package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r15/textured-builder.js.map +1 -1
  217. package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r15/types.d.ts +1 -1
  218. package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r15/voxel-builder.d.ts +2 -2
  219. package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r15/voxel-builder.js +40 -44
  220. package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r15/voxel-builder.js.map +1 -1
  221. package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/builder.d.ts +2 -2
  222. package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/builder.js +30 -34
  223. package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/builder.js.map +1 -1
  224. package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/index.d.ts +4 -4
  225. package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/index.js.map +1 -1
  226. package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/scanner.d.ts +3 -3
  227. package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/scanner.js +23 -20
  228. package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/scanner.js.map +1 -1
  229. package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/textures/artifacts.d.ts +3 -3
  230. package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/textures/artifacts.js +3 -3
  231. package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/textures/face-map.d.ts +1 -1
  232. package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/textures/face-map.js +21 -21
  233. package/node_modules/@playdrop/boxel-core/dist/src/humanoid/r6/textures/face-map.js.map +1 -1
  234. package/node_modules/@playdrop/boxel-core/dist/src/humanoid/templates/index.d.ts +1 -1
  235. package/node_modules/@playdrop/boxel-core/dist/src/humanoid/templates/index.js +2 -2
  236. package/node_modules/@playdrop/boxel-core/dist/src/index.d.ts +19 -19
  237. package/node_modules/@playdrop/boxel-core/dist/src/materials.d.ts +1 -1
  238. package/node_modules/@playdrop/boxel-core/dist/src/materials.js +12 -16
  239. package/node_modules/@playdrop/boxel-core/dist/src/materials.js.map +1 -1
  240. package/node_modules/@playdrop/boxel-core/dist/src/palette_tools.d.ts +1 -1
  241. package/node_modules/@playdrop/boxel-core/dist/src/palette_tools.js +38 -41
  242. package/node_modules/@playdrop/boxel-core/dist/src/palette_tools.js.map +1 -1
  243. package/node_modules/@playdrop/boxel-core/dist/src/serialization.d.ts +1 -1
  244. package/node_modules/@playdrop/boxel-core/dist/src/serialization.js +54 -56
  245. package/node_modules/@playdrop/boxel-core/dist/src/serialization.js.map +1 -1
  246. package/node_modules/@playdrop/boxel-core/dist/src/textures.d.ts +3 -3
  247. package/node_modules/@playdrop/boxel-core/dist/src/textures.js +39 -45
  248. package/node_modules/@playdrop/boxel-core/dist/src/textures.js.map +1 -1
  249. package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/infer-face.d.ts +2 -2
  250. package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/infer-face.js +39 -43
  251. package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/infer-face.js.map +1 -1
  252. package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/layer-mode.d.ts +3 -3
  253. package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/layer-mode.js +35 -35
  254. package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/layer-mode.js.map +1 -1
  255. package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/merge-overlay.d.ts +1 -1
  256. package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/merge-overlay.js +18 -18
  257. package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/merge-overlay.js.map +1 -1
  258. package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/slice.d.ts +3 -3
  259. package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/slice.js +50 -48
  260. package/node_modules/@playdrop/boxel-core/dist/src/transforms/textured-boxes/slice.js.map +1 -1
  261. package/node_modules/@playdrop/boxel-core/dist/src/transforms/upscale.d.ts +1 -1
  262. package/node_modules/@playdrop/boxel-core/dist/src/transforms/upscale.js +22 -26
  263. package/node_modules/@playdrop/boxel-core/dist/src/transforms/upscale.js.map +1 -1
  264. package/node_modules/@playdrop/boxel-core/dist/src/transforms/voxels/slice.d.ts +2 -2
  265. package/node_modules/@playdrop/boxel-core/dist/src/transforms/voxels/slice.js +8 -8
  266. package/node_modules/@playdrop/boxel-core/dist/src/transforms/voxels/slice.js.map +1 -1
  267. package/node_modules/@playdrop/boxel-core/dist/src/transforms/voxels/textured-to-voxel.d.ts +2 -2
  268. package/node_modules/@playdrop/boxel-core/dist/src/transforms/voxels/textured-to-voxel.js +23 -28
  269. package/node_modules/@playdrop/boxel-core/dist/src/transforms/voxels/textured-to-voxel.js.map +1 -1
  270. package/node_modules/@playdrop/boxel-core/dist/src/types.d.ts +8 -8
  271. package/node_modules/@playdrop/boxel-core/dist/src/validation.d.ts +1 -1
  272. package/node_modules/@playdrop/boxel-core/dist/src/validation.js +93 -95
  273. package/node_modules/@playdrop/boxel-core/dist/src/validation.js.map +1 -1
  274. package/node_modules/@playdrop/boxel-core/dist/src/voxels/greedy-mesher.d.ts +1 -1
  275. package/node_modules/@playdrop/boxel-core/dist/src/voxels/greedy-mesher.js +2 -2
  276. package/node_modules/@playdrop/boxel-core/dist/src/voxels/greedy-mesher.js.map +1 -1
  277. package/node_modules/@playdrop/boxel-core/dist/src/voxels.d.ts +1 -1
  278. package/node_modules/@playdrop/boxel-core/dist/src/voxels.js +2 -7
  279. package/node_modules/@playdrop/boxel-core/dist/src/voxels.js.map +1 -1
  280. package/node_modules/@playdrop/boxel-three/dist/src/animations.d.ts +3 -3
  281. package/node_modules/@playdrop/boxel-three/dist/src/builders.d.ts +4 -4
  282. package/node_modules/@playdrop/boxel-three/dist/src/context.d.ts +3 -3
  283. package/node_modules/@playdrop/boxel-three/dist/src/exporters/glb.d.ts +6 -6
  284. package/node_modules/@playdrop/boxel-three/dist/src/exporters/glb.js +9 -1
  285. package/node_modules/@playdrop/boxel-three/dist/src/exporters/image.d.ts +3 -3
  286. package/node_modules/@playdrop/boxel-three/dist/src/index.d.ts +17 -17
  287. package/node_modules/@playdrop/boxel-three/dist/src/instantiate.d.ts +9 -9
  288. package/node_modules/@playdrop/boxel-three/dist/src/nodes.d.ts +3 -3
  289. package/node_modules/@playdrop/boxel-three/dist/src/nodes.js +1 -1
  290. package/node_modules/@playdrop/boxel-three/dist/src/overlays.d.ts +2 -2
  291. package/node_modules/@playdrop/boxel-three/dist/src/primitives.d.ts +1 -1
  292. package/node_modules/@playdrop/boxel-three/dist/src/scene.d.ts +1 -1
  293. package/node_modules/@playdrop/boxel-three/dist/src/skinned-mesh.d.ts +2 -2
  294. package/node_modules/@playdrop/boxel-three/dist/src/texture-atlas.d.ts +1 -1
  295. package/node_modules/@playdrop/boxel-three/dist/src/textures.d.ts +3 -3
  296. package/node_modules/@playdrop/boxel-three/dist/src/types.d.ts +4 -4
  297. package/node_modules/@playdrop/boxel-three/dist/src/voxels/faces.d.ts +2 -2
  298. package/node_modules/@playdrop/boxel-three/dist/src/voxels/mesher.d.ts +1 -1
  299. package/node_modules/@playdrop/boxel-three/dist/test/fixtures/render-worker.d.ts +1 -1
  300. package/node_modules/@playdrop/config/client-meta.json +4 -4
  301. package/node_modules/@playdrop/config/dist/src/client-meta.d.ts +1 -1
  302. package/node_modules/@playdrop/config/dist/src/client-meta.d.ts.map +1 -1
  303. package/node_modules/@playdrop/config/dist/src/client-meta.js +10 -10
  304. package/node_modules/@playdrop/config/dist/src/constants.js +10 -10
  305. package/node_modules/@playdrop/config/dist/src/creator-plans.d.ts +1 -1
  306. package/node_modules/@playdrop/config/dist/src/creator-plans.d.ts.map +1 -1
  307. package/node_modules/@playdrop/config/dist/src/creator-plans.js +27 -28
  308. package/node_modules/@playdrop/config/dist/src/deployment.d.ts +4 -4
  309. package/node_modules/@playdrop/config/dist/src/deployment.d.ts.map +1 -1
  310. package/node_modules/@playdrop/config/dist/src/deployment.js +42 -41
  311. package/node_modules/@playdrop/config/dist/src/game-arena.js +12 -12
  312. package/node_modules/@playdrop/config/dist/src/index.d.ts +9 -9
  313. package/node_modules/@playdrop/config/dist/src/index.d.ts.map +1 -1
  314. package/node_modules/@playdrop/config/dist/src/index.js +24 -25
  315. package/node_modules/@playdrop/config/dist/src/public-deployment.d.ts +4 -4
  316. package/node_modules/@playdrop/config/dist/src/public-deployment.d.ts.map +1 -1
  317. package/node_modules/@playdrop/config/dist/src/public-deployment.js +41 -39
  318. package/node_modules/@playdrop/config/dist/src/runtime-client-meta.js +1 -3
  319. package/node_modules/@playdrop/config/dist/src/runtime-service-origins.d.ts.map +1 -1
  320. package/node_modules/@playdrop/config/dist/src/runtime-service-origins.js +23 -25
  321. package/node_modules/@playdrop/config/dist/src/server/fastify.d.ts +5 -5
  322. package/node_modules/@playdrop/config/dist/src/server/fastify.d.ts.map +1 -1
  323. package/node_modules/@playdrop/config/dist/src/server/fastify.js +44 -46
  324. package/node_modules/@playdrop/config/dist/src/server/logging.d.ts +1 -1
  325. package/node_modules/@playdrop/config/dist/src/server/logging.d.ts.map +1 -1
  326. package/node_modules/@playdrop/config/dist/src/server/logging.js +6 -8
  327. package/node_modules/@playdrop/config/dist/src/types.d.ts +2 -2
  328. package/node_modules/@playdrop/config/dist/test/creator-plans.test.js +12 -12
  329. package/node_modules/@playdrop/config/dist/test/deployment.test.js +59 -59
  330. package/node_modules/@playdrop/config/dist/test/fastify.test.js +4 -4
  331. package/node_modules/@playdrop/config/dist/test/game-arena.test.js +8 -8
  332. package/node_modules/@playdrop/config/dist/test/logging.test.js +6 -6
  333. package/node_modules/@playdrop/config/dist/test/validateClientEnvironment.test.js +57 -57
  334. package/node_modules/@playdrop/config/dist/tsconfig.tsbuildinfo +1 -1
  335. package/node_modules/@playdrop/types/dist/agent-task-playtest.d.ts.map +1 -1
  336. package/node_modules/@playdrop/types/dist/agent-task-terminal.d.ts +2 -2
  337. package/node_modules/@playdrop/types/dist/agent-task-terminal.d.ts.map +1 -1
  338. package/node_modules/@playdrop/types/dist/api.d.ts +314 -250
  339. package/node_modules/@playdrop/types/dist/api.d.ts.map +1 -1
  340. package/node_modules/@playdrop/types/dist/api.js +40 -59
  341. package/node_modules/@playdrop/types/dist/app-capability-filters.d.ts +2 -2
  342. package/node_modules/@playdrop/types/dist/app-playtest-tape.d.ts +6 -6
  343. package/node_modules/@playdrop/types/dist/app-playtest-tape.d.ts.map +1 -1
  344. package/node_modules/@playdrop/types/dist/app-review.d.ts +2 -2
  345. package/node_modules/@playdrop/types/dist/app-review.d.ts.map +1 -1
  346. package/node_modules/@playdrop/types/dist/app-review.js +1 -6
  347. package/node_modules/@playdrop/types/dist/app.d.ts.map +1 -1
  348. package/node_modules/@playdrop/types/dist/asset-pack.d.ts +5 -5
  349. package/node_modules/@playdrop/types/dist/asset-spec.d.ts +4 -4
  350. package/node_modules/@playdrop/types/dist/asset.d.ts +11 -11
  351. package/node_modules/@playdrop/types/dist/attachment-policy.d.ts.map +1 -1
  352. package/node_modules/@playdrop/types/dist/chat.d.ts +3 -3
  353. package/node_modules/@playdrop/types/dist/creator-public-image.d.ts.map +1 -1
  354. package/node_modules/@playdrop/types/dist/graph.d.ts +4 -4
  355. package/node_modules/@playdrop/types/dist/index.d.ts +25 -25
  356. package/node_modules/@playdrop/types/dist/instrument-evidence.d.ts +2 -2
  357. package/node_modules/@playdrop/types/dist/instrument-evidence.d.ts.map +1 -1
  358. package/node_modules/@playdrop/types/dist/instrument-evidence.js +2 -11
  359. package/node_modules/@playdrop/types/dist/locale.d.ts +2 -2
  360. package/node_modules/@playdrop/types/dist/locale.d.ts.map +1 -1
  361. package/node_modules/@playdrop/types/dist/locale.js +2 -17
  362. package/node_modules/@playdrop/types/dist/owned-assets.d.ts +2 -2
  363. package/node_modules/@playdrop/types/dist/owned-assets.d.ts.map +1 -1
  364. package/node_modules/@playdrop/types/dist/player-meta.d.ts +3 -3
  365. package/node_modules/@playdrop/types/dist/player-meta.d.ts.map +1 -1
  366. package/node_modules/@playdrop/types/dist/playtest-notes.d.ts +11 -11
  367. package/node_modules/@playdrop/types/dist/playtest-notes.d.ts.map +1 -1
  368. package/node_modules/@playdrop/types/dist/playtrade.d.ts +8 -5
  369. package/node_modules/@playdrop/types/dist/playtrade.d.ts.map +1 -1
  370. package/node_modules/@playdrop/types/dist/realtime.d.ts +1 -1
  371. package/node_modules/@playdrop/types/dist/tweaks.d.ts +4 -4
  372. package/node_modules/@playdrop/types/dist/tweaks.d.ts.map +1 -1
  373. package/node_modules/@playdrop/types/dist/tweaks.js +12 -2
  374. package/node_modules/@playdrop/types/dist/version.d.ts +14 -14
  375. package/node_modules/@playdrop/types/dist/version.d.ts.map +1 -1
  376. package/node_modules/@playdrop/types/dist/version.js +4 -1
  377. package/node_modules/@playdrop/vox-three/dist/src/index.d.ts +1 -1
  378. package/node_modules/@playdrop/vox-three/dist/src/vox.d.ts +2 -2
  379. package/node_modules/@playdrop/vox-three/dist/src/vox.js +20 -18
  380. package/node_modules/@playdrop/vox-three/dist/src/vox.js.map +1 -1
  381. package/node_modules/@playdrop/vox-three/dist/test/vox.test.js +11 -14
  382. package/node_modules/@playdrop/vox-three/dist/test/vox.test.js.map +1 -1
  383. package/package.json +1 -1
@@ -46,93 +46,93 @@ const boxel_core_1 = require("@playdrop/boxel-core");
46
46
  const vox_three_1 = require("@playdrop/vox-three");
47
47
  const types_1 = require("@playdrop/types");
48
48
  const playwright_1 = require("../playwright");
49
- const GENERATED_MODEL_3D_FORMATS = new Set(['PLAYDROP_BOXEL_JSON', 'VOX']);
50
- const BOXEL_REQUIRED_FILE_ROLES = ['primary', 'mesh', 'preview'];
51
- const VOX_REQUIRED_FILE_ROLES = ['primary', 'boxel', 'mesh', 'preview'];
49
+ const GENERATED_MODEL_3D_FORMATS = new Set(["PLAYDROP_BOXEL_JSON", "VOX"]);
50
+ const BOXEL_REQUIRED_FILE_ROLES = ["primary", "mesh", "preview"];
51
+ const VOX_REQUIRED_FILE_ROLES = ["primary", "boxel", "mesh", "preview"];
52
52
  const DEFAULT_PRESET = {
53
- meshMode: 'merged',
54
- previewMode: 'merged',
55
- previewDirection: 'preview',
53
+ meshMode: "merged",
54
+ previewMode: "merged",
55
+ previewDirection: "preview",
56
56
  width: 1024,
57
57
  height: 1024,
58
58
  };
59
59
  const MODEL_PRESET_BY_SUBCATEGORY = {
60
60
  avatar: {
61
- meshMode: 'skinned',
62
- previewMode: 'skinned',
63
- previewDirection: 'headshot',
61
+ meshMode: "skinned",
62
+ previewMode: "skinned",
63
+ previewDirection: "headshot",
64
64
  width: 1024,
65
65
  height: 1024,
66
66
  },
67
67
  humanoid: {
68
- meshMode: 'skinned',
69
- previewMode: 'skinned',
70
- previewDirection: 'headshot',
68
+ meshMode: "skinned",
69
+ previewMode: "skinned",
70
+ previewDirection: "headshot",
71
71
  width: 1024,
72
72
  height: 1024,
73
73
  },
74
74
  creature: {
75
- meshMode: 'skinned',
76
- previewMode: 'skinned',
77
- previewDirection: 'headshot',
75
+ meshMode: "skinned",
76
+ previewMode: "skinned",
77
+ previewDirection: "headshot",
78
78
  width: 1024,
79
79
  height: 1024,
80
80
  },
81
81
  block: {
82
- meshMode: 'merged',
83
- previewMode: 'merged',
84
- previewDirection: 'preview',
82
+ meshMode: "merged",
83
+ previewMode: "merged",
84
+ previewDirection: "preview",
85
85
  width: 1024,
86
86
  height: 1024,
87
87
  },
88
88
  generic: {
89
- meshMode: 'merged',
90
- previewMode: 'merged',
91
- previewDirection: 'preview',
89
+ meshMode: "merged",
90
+ previewMode: "merged",
91
+ previewDirection: "preview",
92
92
  width: 1024,
93
93
  height: 1024,
94
94
  },
95
95
  };
96
- const TOOL_NAME = 'playdrop';
97
- const WORKER_ENTRY_BASENAMES = ['model-worker.ts', 'model-worker.js'];
96
+ const TOOL_NAME = "playdrop";
97
+ const WORKER_ENTRY_BASENAMES = ["model-worker.ts", "model-worker.js"];
98
98
  let workerBundlePromise = null;
99
99
  function normalizeRole(role) {
100
100
  return role.trim().toLowerCase();
101
101
  }
102
102
  function resolveTaskLabel(task) {
103
- if ('kind' in task && task.kind === 'owned-asset') {
103
+ if ("kind" in task && task.kind === "owned-asset") {
104
104
  return `${task.appName}:${task.name}`;
105
105
  }
106
106
  return task.name;
107
107
  }
108
108
  function getRolePath(task, role) {
109
109
  for (const [entryRole, filePath] of Object.entries(task.filePaths)) {
110
- if (normalizeRole(entryRole) === role && typeof filePath === 'string' && filePath.trim().length > 0) {
110
+ if (normalizeRole(entryRole) === role && typeof filePath === "string" && filePath.trim().length > 0) {
111
111
  return filePath;
112
112
  }
113
113
  }
114
114
  return null;
115
115
  }
116
116
  function inferGeneratedModel3DFormat(task, explicitFormat) {
117
- const normalizedFormat = typeof explicitFormat === 'string' ? explicitFormat.trim().toUpperCase() : '';
117
+ const normalizedFormat = typeof explicitFormat === "string" ? explicitFormat.trim().toUpperCase() : "";
118
118
  if (GENERATED_MODEL_3D_FORMATS.has(normalizedFormat)) {
119
119
  return normalizedFormat;
120
120
  }
121
- const primaryPath = getRolePath(task, 'primary');
121
+ const primaryPath = getRolePath(task, "primary");
122
122
  if (!primaryPath) {
123
123
  return null;
124
124
  }
125
125
  const normalizedPath = primaryPath.trim().toLowerCase();
126
- if (normalizedPath.endsWith('.boxel.json')) {
127
- return 'PLAYDROP_BOXEL_JSON';
126
+ if (normalizedPath.endsWith(".boxel.json")) {
127
+ return "PLAYDROP_BOXEL_JSON";
128
128
  }
129
- if (normalizedPath.endsWith('.vox')) {
130
- return 'VOX';
129
+ if (normalizedPath.endsWith(".vox")) {
130
+ return "VOX";
131
131
  }
132
132
  return null;
133
133
  }
134
134
  function getRequiredFileRoles(format) {
135
- return format === 'VOX' ? VOX_REQUIRED_FILE_ROLES : BOXEL_REQUIRED_FILE_ROLES;
135
+ return format === "VOX" ? VOX_REQUIRED_FILE_ROLES : BOXEL_REQUIRED_FILE_ROLES;
136
136
  }
137
137
  function getMissingRequiredRoles(task, format) {
138
138
  const normalizedRoles = new Set(Object.keys(task.filePaths).map((role) => normalizeRole(role)));
@@ -148,7 +148,7 @@ function resolveWorkerEntryPath() {
148
148
  throw new Error(`[${TOOL_NAME}] Boxel worker entry file not found from ${__dirname}.`);
149
149
  }
150
150
  async function loadEsbuild() {
151
- const module = await Promise.resolve().then(() => __importStar(require('esbuild')));
151
+ const module = await Promise.resolve().then(() => __importStar(require("esbuild")));
152
152
  return module.build;
153
153
  }
154
154
  async function getWorkerBundle() {
@@ -158,12 +158,12 @@ async function getWorkerBundle() {
158
158
  const result = await build({
159
159
  entryPoints: [resolveWorkerEntryPath()],
160
160
  bundle: true,
161
- platform: 'browser',
162
- format: 'esm',
163
- target: 'es2022',
161
+ platform: "browser",
162
+ format: "esm",
163
+ target: "es2022",
164
164
  write: false,
165
165
  sourcemap: false,
166
- logLevel: 'silent',
166
+ logLevel: "silent",
167
167
  });
168
168
  const output = result.outputFiles?.[0]?.text;
169
169
  if (!output) {
@@ -177,32 +177,35 @@ async function getWorkerBundle() {
177
177
  async function withModelWorkerPage(callback, viewport) {
178
178
  return (0, playwright_1.withChromiumPage)(async ({ page }) => {
179
179
  const consoleErrors = [];
180
- page.on('console', (message) => {
181
- if (message.type() === 'error') {
180
+ page.on("console", (message) => {
181
+ if (message.type() === "error") {
182
182
  consoleErrors.push(message.text());
183
183
  }
184
184
  });
185
- page.on('pageerror', (error) => {
185
+ page.on("pageerror", (error) => {
186
186
  consoleErrors.push(error?.message ?? String(error));
187
187
  });
188
- await page.setContent('<canvas id="viewport"></canvas>', { waitUntil: 'domcontentloaded' });
188
+ await page.setContent('<canvas id="viewport"></canvas>', { waitUntil: "domcontentloaded" });
189
189
  const bundle = await getWorkerBundle();
190
- await page.addScriptTag({ type: 'module', content: bundle });
191
- await page.waitForFunction(() => typeof window.playdropBoxelWorker !== 'undefined');
190
+ await page.addScriptTag({ type: "module", content: bundle });
191
+ await page.waitForFunction(() => typeof window.playdropBoxelWorker !== "undefined");
192
192
  const result = await callback(page);
193
193
  if (consoleErrors.length > 0) {
194
- throw new Error(consoleErrors.join('\n'));
194
+ throw new Error(consoleErrors.join("\n"));
195
195
  }
196
196
  return result;
197
197
  }, { viewport });
198
198
  }
199
199
  async function exportBoxelWithWorker(boxel, mode) {
200
200
  try {
201
- const base64 = await withModelWorkerPage((page) => page.evaluate(({ model, exportMode }) => window.playdropBoxelWorker.exportBoxel(model, { mode: exportMode }), { model: boxel, exportMode: mode }), { width: 1024, height: 1024 });
202
- if (typeof base64 !== 'string' || base64.length === 0) {
203
- throw new Error('Model exporter did not return GLB data.');
201
+ const base64 = await withModelWorkerPage((page) => page.evaluate(({ model, exportMode }) => window.playdropBoxelWorker.exportBoxel(model, { mode: exportMode }), {
202
+ model: boxel,
203
+ exportMode: mode,
204
+ }), { width: 1024, height: 1024 });
205
+ if (typeof base64 !== "string" || base64.length === 0) {
206
+ throw new Error("Model exporter did not return GLB data.");
204
207
  }
205
- return Buffer.from(base64, 'base64');
208
+ return Buffer.from(base64, "base64");
206
209
  }
207
210
  catch (error) {
208
211
  throw (0, playwright_1.createPlaywrightLaunchError)(TOOL_NAME, error);
@@ -219,10 +222,10 @@ async function renderPreviewWithWorker(boxel, options) {
219
222
  height: options.height,
220
223
  },
221
224
  }), { width: options.width, height: options.height });
222
- if (typeof dataUrl !== 'string' || !dataUrl.startsWith('data:image/png;base64,')) {
223
- throw new Error('Model renderer did not return PNG data.');
225
+ if (typeof dataUrl !== "string" || !dataUrl.startsWith("data:image/png;base64,")) {
226
+ throw new Error("Model renderer did not return PNG data.");
224
227
  }
225
- return Buffer.from(dataUrl.slice('data:image/png;base64,'.length), 'base64');
228
+ return Buffer.from(dataUrl.slice("data:image/png;base64,".length), "base64");
226
229
  }
227
230
  catch (error) {
228
231
  throw (0, playwright_1.createPlaywrightLaunchError)(TOOL_NAME, error);
@@ -231,16 +234,16 @@ async function renderPreviewWithWorker(boxel, options) {
231
234
  async function renderVoxPreviewWithWorker(voxBuffer, options) {
232
235
  try {
233
236
  const dataUrl = await withModelWorkerPage((page) => page.evaluate(({ voxBase64, renderOptions }) => window.playdropBoxelWorker.renderVox(voxBase64, renderOptions), {
234
- voxBase64: voxBuffer.toString('base64'),
237
+ voxBase64: voxBuffer.toString("base64"),
235
238
  renderOptions: {
236
239
  width: options.width,
237
240
  height: options.height,
238
241
  },
239
242
  }), { width: options.width, height: options.height });
240
- if (typeof dataUrl !== 'string' || !dataUrl.startsWith('data:image/png;base64,')) {
241
- throw new Error('VOX preview renderer did not return PNG data.');
243
+ if (typeof dataUrl !== "string" || !dataUrl.startsWith("data:image/png;base64,")) {
244
+ throw new Error("VOX preview renderer did not return PNG data.");
242
245
  }
243
- return Buffer.from(dataUrl.slice('data:image/png;base64,'.length), 'base64');
246
+ return Buffer.from(dataUrl.slice("data:image/png;base64,".length), "base64");
244
247
  }
245
248
  catch (error) {
246
249
  throw (0, playwright_1.createPlaywrightLaunchError)(TOOL_NAME, error);
@@ -257,8 +260,11 @@ function parseAndValidateBoxel(raw, label) {
257
260
  }
258
261
  const validation = (0, boxel_core_1.validateBoxel)(parsed);
259
262
  if (!validation.boxel || validation.issues.length > 0) {
260
- const summary = validation.issues.slice(0, 3).map((issue) => `${issue.path}: ${issue.message}`).join('; ');
261
- throw new Error(`Asset "${label}" files.primary failed boxel validation${summary ? `: ${summary}` : ''}`);
263
+ const summary = validation.issues
264
+ .slice(0, 3)
265
+ .map((issue) => `${issue.path}: ${issue.message}`)
266
+ .join("; ");
267
+ throw new Error(`Asset "${label}" files.primary failed boxel validation${summary ? `: ${summary}` : ""}`);
262
268
  }
263
269
  return validation.boxel;
264
270
  }
@@ -267,9 +273,9 @@ function resolvePreset(subcategory) {
267
273
  return MODEL_PRESET_BY_SUBCATEGORY[normalized] ?? DEFAULT_PRESET;
268
274
  }
269
275
  function isGeneratedModel3DAssetTask(task, format) {
270
- const category = typeof task.category === 'string' ? task.category.trim().toUpperCase() : '';
271
- const subcategory = typeof task.subcategory === 'string' ? task.subcategory.trim() : '';
272
- if (category !== 'MODEL_3D' || !(0, types_1.isModel3DAssetSubcategory)('MODEL_3D', subcategory)) {
276
+ const category = typeof task.category === "string" ? task.category.trim().toUpperCase() : "";
277
+ const subcategory = typeof task.subcategory === "string" ? task.subcategory.trim() : "";
278
+ if (category !== "MODEL_3D" || !(0, types_1.isModel3DAssetSubcategory)("MODEL_3D", subcategory)) {
273
279
  return false;
274
280
  }
275
281
  return inferGeneratedModel3DFormat(task, format) !== null;
@@ -282,7 +288,7 @@ function assertGeneratedModel3DAssetRoles(task, format) {
282
288
  const missing = getMissingRequiredRoles(task, generatedFormat);
283
289
  if (missing.length > 0) {
284
290
  const label = resolveTaskLabel(task);
285
- throw new Error(`Asset "${label}" requires files.${missing.join(', files.')} for format "${generatedFormat}".`);
291
+ throw new Error(`Asset "${label}" requires files.${missing.join(", files.")} for format "${generatedFormat}".`);
286
292
  }
287
293
  }
288
294
  async function ensureExistingFile(filePath, label, role) {
@@ -299,20 +305,20 @@ async function ensureExistingFile(filePath, label, role) {
299
305
  }
300
306
  }
301
307
  async function loadBoxelFromPrimary(task, label) {
302
- const primaryPath = getRolePath(task, 'primary');
308
+ const primaryPath = getRolePath(task, "primary");
303
309
  if (!primaryPath) {
304
310
  throw new Error(`Asset "${label}" is missing files.primary.`);
305
311
  }
306
- await ensureExistingFile(primaryPath, label, 'primary');
307
- const raw = await (0, promises_1.readFile)(primaryPath, 'utf8');
312
+ await ensureExistingFile(primaryPath, label, "primary");
313
+ const raw = await (0, promises_1.readFile)(primaryPath, "utf8");
308
314
  return parseAndValidateBoxel(raw, label);
309
315
  }
310
316
  async function loadValidatedVoxBuffer(task, label) {
311
- const primaryPath = getRolePath(task, 'primary');
317
+ const primaryPath = getRolePath(task, "primary");
312
318
  if (!primaryPath) {
313
319
  throw new Error(`Asset "${label}" is missing files.primary.`);
314
320
  }
315
- await ensureExistingFile(primaryPath, label, 'primary');
321
+ await ensureExistingFile(primaryPath, label, "primary");
316
322
  const buffer = await (0, promises_1.readFile)(primaryPath);
317
323
  try {
318
324
  (0, vox_three_1.assertValidVoxBuffer)(buffer);
@@ -330,27 +336,25 @@ async function prepareModel3DAssetArtifacts(task, options = {}) {
330
336
  }
331
337
  assertGeneratedModel3DAssetRoles(task, task.format);
332
338
  const label = resolveTaskLabel(task);
333
- const meshPath = getRolePath(task, 'mesh');
334
- const previewPath = getRolePath(task, 'preview');
339
+ const meshPath = getRolePath(task, "mesh");
340
+ const previewPath = getRolePath(task, "preview");
335
341
  if (!meshPath || !previewPath) {
336
342
  throw new Error(`Asset "${label}" is missing required generated 3D file paths.`);
337
343
  }
338
- const voxBuffer = generatedFormat === 'VOX'
339
- ? await loadValidatedVoxBuffer(task, label)
340
- : null;
341
- const boxel = generatedFormat === 'VOX'
344
+ const voxBuffer = generatedFormat === "VOX" ? await loadValidatedVoxBuffer(task, label) : null;
345
+ const boxel = generatedFormat === "VOX"
342
346
  ? await (0, vox_three_1.convertVoxToBoxel)(voxBuffer, task.name)
343
347
  : await loadBoxelFromPrimary(task, label);
344
348
  if (options.dryRun) {
345
349
  return true;
346
350
  }
347
- if (typeof task.subcategory !== 'string' || task.subcategory.trim().length === 0) {
351
+ if (typeof task.subcategory !== "string" || task.subcategory.trim().length === 0) {
348
352
  throw new Error(`Asset "${label}" is missing a model subcategory.`);
349
353
  }
350
354
  const preset = resolvePreset(task.subcategory);
351
355
  const [meshBuffer, previewBuffer] = await Promise.all([
352
356
  exportBoxelWithWorker(boxel, preset.meshMode),
353
- generatedFormat === 'VOX'
357
+ generatedFormat === "VOX"
354
358
  ? renderVoxPreviewWithWorker(voxBuffer, {
355
359
  width: preset.width,
356
360
  height: preset.height,
@@ -366,13 +370,13 @@ async function prepareModel3DAssetArtifacts(task, options = {}) {
366
370
  await (0, promises_1.mkdir)(node_path_1.default.dirname(previewPath), { recursive: true });
367
371
  await (0, promises_1.writeFile)(meshPath, meshBuffer);
368
372
  await (0, promises_1.writeFile)(previewPath, previewBuffer);
369
- if (generatedFormat === 'VOX') {
370
- const boxelPath = getRolePath(task, 'boxel');
373
+ if (generatedFormat === "VOX") {
374
+ const boxelPath = getRolePath(task, "boxel");
371
375
  if (!boxelPath) {
372
376
  throw new Error(`Asset "${label}" is missing files.boxel.`);
373
377
  }
374
378
  await (0, promises_1.mkdir)(node_path_1.default.dirname(boxelPath), { recursive: true });
375
- await (0, promises_1.writeFile)(boxelPath, `${(0, boxel_core_1.formatBoxel)(boxel)}\n`, 'utf8');
379
+ await (0, promises_1.writeFile)(boxelPath, `${(0, boxel_core_1.formatBoxel)(boxel)}\n`, "utf8");
376
380
  }
377
381
  return true;
378
382
  }
@@ -1,4 +1,4 @@
1
- import { type ExportMode } from '@playdrop/boxel-three';
1
+ import { type ExportMode } from "@playdrop/boxel-three";
2
2
  type ExportEntityOptions = {
3
3
  mode?: ExportMode;
4
4
  animationIds?: string[] | null;
@@ -41,7 +41,7 @@ const vox_three_1 = require("@playdrop/vox-three");
41
41
  function arrayBufferToBase64(buffer) {
42
42
  const bytes = new Uint8Array(buffer);
43
43
  const chunkSize = 0x8000;
44
- let binary = '';
44
+ let binary = "";
45
45
  for (let index = 0; index < bytes.length; index += chunkSize) {
46
46
  const chunk = bytes.subarray(index, index + chunkSize);
47
47
  binary += String.fromCharCode(...chunk);
@@ -53,9 +53,9 @@ function getOrCreateRenderer() {
53
53
  if (cachedRenderer) {
54
54
  return cachedRenderer;
55
55
  }
56
- const canvas = document.getElementById('viewport');
56
+ const canvas = document.getElementById("viewport");
57
57
  if (!canvas) {
58
- throw new Error('render_canvas_unavailable');
58
+ throw new Error("render_canvas_unavailable");
59
59
  }
60
60
  cachedRenderer = new THREE.WebGLRenderer({
61
61
  canvas,
@@ -93,7 +93,7 @@ async function renderBoxel(modelJson, options) {
93
93
  THREE,
94
94
  renderer,
95
95
  entity: model,
96
- mode: options?.mode ?? 'hierarchical',
96
+ mode: options?.mode ?? "hierarchical",
97
97
  animationIds: options?.animationIds,
98
98
  animationId: options?.animationId ?? undefined,
99
99
  width: options?.width,
@@ -103,8 +103,8 @@ async function renderBoxel(modelJson, options) {
103
103
  });
104
104
  }
105
105
  async function renderVox(voxBase64, options) {
106
- if (typeof voxBase64 !== 'string' || voxBase64.length === 0) {
107
- throw new Error('vox_preview_input_missing');
106
+ if (typeof voxBase64 !== "string" || voxBase64.length === 0) {
107
+ throw new Error("vox_preview_input_missing");
108
108
  }
109
109
  const renderer = getOrCreateRenderer();
110
110
  renderer.setPixelRatio(1);
package/dist/browser.js CHANGED
@@ -5,14 +5,14 @@ exports.setOpenBrowserForTests = setOpenBrowserForTests;
5
5
  exports.resetOpenBrowserForTests = resetOpenBrowserForTests;
6
6
  const node_child_process_1 = require("node:child_process");
7
7
  function getBrowserCommand(url) {
8
- if (process.platform === 'darwin') {
9
- return { command: 'open', args: [url] };
8
+ if (process.platform === "darwin") {
9
+ return { command: "open", args: [url] };
10
10
  }
11
- if (process.platform === 'win32') {
12
- return { command: 'cmd', args: ['/c', 'start', '', url] };
11
+ if (process.platform === "win32") {
12
+ return { command: "cmd", args: ["/c", "start", "", url] };
13
13
  }
14
- if (process.platform === 'linux') {
15
- return { command: 'xdg-open', args: [url] };
14
+ if (process.platform === "linux") {
15
+ return { command: "xdg-open", args: [url] };
16
16
  }
17
17
  return null;
18
18
  }
@@ -24,10 +24,10 @@ async function defaultOpenBrowser(url) {
24
24
  return await new Promise((resolve) => {
25
25
  const child = (0, node_child_process_1.spawn)(command.command, command.args, {
26
26
  detached: true,
27
- stdio: 'ignore',
27
+ stdio: "ignore",
28
28
  });
29
- child.once('error', () => resolve(false));
30
- child.once('spawn', () => {
29
+ child.once("error", () => resolve(false));
30
+ child.once("spawn", () => {
31
31
  child.unref();
32
32
  resolve(true);
33
33
  });
@@ -1,4 +1,4 @@
1
- import { type AppSurface } from '@playdrop/types';
1
+ import { type AppSurface } from "@playdrop/types";
2
2
  export type SurfaceTargetsMap = {
3
3
  desktop: boolean;
4
4
  mobileLandscape: boolean;
@@ -10,52 +10,52 @@ function parseSurfaceTargets(input) {
10
10
  const map = { desktop: false, mobileLandscape: false, mobilePortrait: false };
11
11
  if (Array.isArray(input)) {
12
12
  for (const entry of input) {
13
- if (entry === 'DESKTOP')
13
+ if (entry === "DESKTOP")
14
14
  map.desktop = true;
15
- if (entry === 'MOBILE_LANDSCAPE')
15
+ if (entry === "MOBILE_LANDSCAPE")
16
16
  map.mobileLandscape = true;
17
- if (entry === 'MOBILE_PORTRAIT')
17
+ if (entry === "MOBILE_PORTRAIT")
18
18
  map.mobilePortrait = true;
19
19
  }
20
20
  }
21
- else if (input && typeof input === 'object') {
21
+ else if (input && typeof input === "object") {
22
22
  const source = input;
23
- for (const key of ['desktop', 'mobileLandscape', 'mobilePortrait']) {
24
- if (typeof source[key] !== 'boolean')
23
+ for (const key of ["desktop", "mobileLandscape", "mobilePortrait"]) {
24
+ if (typeof source[key] !== "boolean")
25
25
  throw new Error(`surfaceTargets.${key} must be a boolean.`);
26
26
  map[key] = Boolean(source[key]);
27
27
  }
28
28
  }
29
29
  else {
30
- throw new Error('surfaceTargets must be an object with desktop, mobileLandscape, and mobilePortrait booleans.');
30
+ throw new Error("surfaceTargets must be an object with desktop, mobileLandscape, and mobilePortrait booleans.");
31
31
  }
32
32
  if (!map.desktop && !map.mobileLandscape && !map.mobilePortrait) {
33
- throw new Error('surfaceTargets must enable at least one platform.');
33
+ throw new Error("surfaceTargets must enable at least one platform.");
34
34
  }
35
35
  const list = [];
36
36
  if (map.desktop)
37
- list.push('DESKTOP');
37
+ list.push("DESKTOP");
38
38
  if (map.mobileLandscape)
39
- list.push('MOBILE_LANDSCAPE');
39
+ list.push("MOBILE_LANDSCAPE");
40
40
  if (map.mobilePortrait)
41
- list.push('MOBILE_PORTRAIT');
41
+ list.push("MOBILE_PORTRAIT");
42
42
  return { map, list };
43
43
  }
44
44
  const DEFAULT_SURFACE_TARGETS_OBJECT = { desktop: true, mobileLandscape: false, mobilePortrait: false };
45
- const LEGACY_CATALOGUE_VERSION_KEY = ['schema', 'Version'].join('');
45
+ const LEGACY_CATALOGUE_VERSION_KEY = ["schema", "Version"].join("");
46
46
  function parseCatalogueEntries(cataloguePath) {
47
47
  try {
48
- const raw = (0, node_fs_1.readFileSync)(cataloguePath, 'utf8');
48
+ const raw = (0, node_fs_1.readFileSync)(cataloguePath, "utf8");
49
49
  const data = JSON.parse(raw);
50
- if (!data || typeof data !== 'object' || Array.isArray(data)) {
51
- throw new Error('catalogue.json must be an object');
50
+ if (!data || typeof data !== "object" || Array.isArray(data)) {
51
+ throw new Error("catalogue.json must be an object");
52
52
  }
53
53
  if (Object.prototype.hasOwnProperty.call(data, LEGACY_CATALOGUE_VERSION_KEY)) {
54
- throw new Error('legacy top-level version field is not supported');
54
+ throw new Error("legacy top-level version field is not supported");
55
55
  }
56
56
  const entries = data?.apps;
57
57
  return Array.isArray(entries)
58
- ? entries.filter((entry) => Boolean(entry && typeof entry === 'object'))
58
+ ? entries.filter((entry) => Boolean(entry && typeof entry === "object"))
59
59
  : [];
60
60
  }
61
61
  catch {
@@ -64,9 +64,9 @@ function parseCatalogueEntries(cataloguePath) {
64
64
  }
65
65
  function findMatchingCatalogueEntries(apps, relativePath, fileName) {
66
66
  return apps.filter((entry) => {
67
- const entryName = typeof entry.name === 'string' ? entry.name.trim() : '';
68
- const entryFile = typeof entry.file === 'string' ? entry.file.trim() : `${entryName}.html`;
69
- const normalized = entryFile.replace(/\\/g, '/');
67
+ const entryName = typeof entry.name === "string" ? entry.name.trim() : "";
68
+ const entryFile = typeof entry.file === "string" ? entry.file.trim() : `${entryName}.html`;
69
+ const normalized = entryFile.replace(/\\/g, "/");
70
70
  return normalized === relativePath || normalized === fileName;
71
71
  });
72
72
  }
@@ -80,9 +80,9 @@ function findAppCatalogueInfo(htmlPath) {
80
80
  const absolute = (0, node_path_1.resolve)(htmlPath);
81
81
  const fileName = (0, node_path_1.basename)(absolute);
82
82
  for (let dir = (0, node_path_1.dirname)(absolute);; dir = (0, node_path_1.dirname)(dir)) {
83
- const cataloguePath = (0, node_path_1.join)(dir, 'catalogue.json');
83
+ const cataloguePath = (0, node_path_1.join)(dir, "catalogue.json");
84
84
  if ((0, node_fs_1.existsSync)(cataloguePath) && (0, node_fs_1.statSync)(cataloguePath).isFile()) {
85
- const rel = (0, node_path_1.relative)(dir, absolute).replace(/\\/g, '/');
85
+ const rel = (0, node_path_1.relative)(dir, absolute).replace(/\\/g, "/");
86
86
  const apps = parseCatalogueEntries(cataloguePath);
87
87
  const matches = findMatchingCatalogueEntries(apps, rel, fileName);
88
88
  if (matches.length > 1) {
@@ -90,14 +90,14 @@ function findAppCatalogueInfo(htmlPath) {
90
90
  }
91
91
  if (matches.length === 1) {
92
92
  const match = matches[0];
93
- const typeValue = typeof match.type === 'string' ? match.type.trim() : '';
93
+ const typeValue = typeof match.type === "string" ? match.type.trim() : "";
94
94
  const parsedType = (0, types_1.parseAppType)(typeValue);
95
95
  if (!parsedType) {
96
- throw new Error(`Entry in ${cataloguePath} must include a valid type (${types_1.APP_TYPE_VALUES.join(', ')}).`);
96
+ throw new Error(`Entry in ${cataloguePath} must include a valid type (${types_1.APP_TYPE_VALUES.join(", ")}).`);
97
97
  }
98
- const name = typeof match.name === 'string' && match.name.trim().length > 0
98
+ const name = typeof match.name === "string" && match.name.trim().length > 0
99
99
  ? match.name.trim()
100
- : fileName.replace(/\.html$/i, '');
100
+ : fileName.replace(/\.html$/i, "");
101
101
  let surfaceTargets;
102
102
  try {
103
103
  surfaceTargets = parseSurfaceTargets(match.surfaceTargets);