@playdrop/playdrop-cli 0.16.5 → 0.16.12

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
package/dist/index.js CHANGED
@@ -52,7 +52,7 @@ const messages_1 = require("./messages");
52
52
  // Restricted shim: inside a worker task workspace only task-scoped commands,
53
53
  // local build/run helpers, safe read-only lookups, and AI generation are
54
54
  // permitted. Worker lease credentials are never exposed to the agent process.
55
- if (process.env.PLAYDROP_WORKER_CONTEXT === '1') {
55
+ if (process.env.PLAYDROP_WORKER_CONTEXT === "1") {
56
56
  const workerContextBlockMessage = (0, worker_1.resolveWorkerContextCommandBlockMessage)(process.argv.slice(2));
57
57
  if (workerContextBlockMessage) {
58
58
  console.error(workerContextBlockMessage);
@@ -61,34 +61,34 @@ if (process.env.PLAYDROP_WORKER_CONTEXT === '1') {
61
61
  }
62
62
  function printRemovedCommandHint(command) {
63
63
  const replacements = {
64
- list: 'playdrop browse',
65
- generate: 'playdrop ai create',
66
- generations: 'playdrop ai jobs browse',
67
- init: 'playdrop workspaces init',
68
- create: 'playdrop project create app',
69
- dev: 'playdrop project dev',
70
- capture: 'playdrop project capture',
71
- validate: 'playdrop project validate',
72
- build: 'playdrop project build',
73
- format: 'playdrop project format',
74
- upload: 'playdrop project publish',
75
- upgrade: 'playdrop update',
76
- documentation: 'playdrop documentation browse',
77
- feedback: 'playdrop feedback send',
64
+ list: "playdrop browse",
65
+ generate: "playdrop ai create",
66
+ generations: "playdrop ai jobs browse",
67
+ init: "playdrop workspaces init",
68
+ create: "playdrop project create app",
69
+ dev: "playdrop project dev",
70
+ capture: "playdrop project capture",
71
+ validate: "playdrop project validate",
72
+ build: "playdrop project build",
73
+ format: "playdrop project format",
74
+ upload: "playdrop project publish",
75
+ upgrade: "playdrop update",
76
+ documentation: "playdrop documentation browse",
77
+ feedback: "playdrop feedback send",
78
78
  };
79
79
  if (replacements[command]) {
80
80
  console.error(`"${command}" was removed from the clean-break CLI. Use "${replacements[command]}" instead.`);
81
81
  return;
82
82
  }
83
- if (command === 'assets') {
83
+ if (command === "assets") {
84
84
  console.error('"assets" was removed. Use "playdrop detail <creator>/asset/<name>", "playdrop versions browse <creator>/asset/<name>", or "playdrop creations assets ..." instead.');
85
85
  return;
86
86
  }
87
- if (command === 'asset-packs') {
87
+ if (command === "asset-packs") {
88
88
  console.error('"asset-packs" was removed. Use "playdrop detail <creator>/asset-pack/<name>", "playdrop versions browse <creator>/asset-pack/<name>", or "playdrop creations asset-packs ..." instead.');
89
89
  return;
90
90
  }
91
- if (command === 'internal' || command === 'migrate-catalogue-v2' || command === 'download') {
91
+ if (command === "internal" || command === "migrate-catalogue-v2" || command === "download") {
92
92
  console.error(`"${command}" is not part of the redesigned CLI surface. Run "playdrop help" to see the supported commands.`);
93
93
  return;
94
94
  }
@@ -96,15 +96,15 @@ function printRemovedCommandHint(command) {
96
96
  }
97
97
  const program = new commander_1.Command();
98
98
  program
99
- .name('playdrop')
100
- .description('Playdrop CLI for creators and AI agents.')
101
- .usage('<command> [options]')
102
- .version((0, clientInfo_1.getCliVersionLabel)(), '-V, --version', 'Print CLI version')
103
- .addHelpCommand('help [command]', 'Show help for a command');
99
+ .name("playdrop")
100
+ .description("Playdrop CLI for creators and AI agents.")
101
+ .usage("<command> [options]")
102
+ .version((0, clientInfo_1.getCliVersionLabel)(), "-V, --version", "Print CLI version")
103
+ .addHelpCommand("help [command]", "Show help for a command");
104
104
  program.showHelpAfterError();
105
105
  program.showSuggestionAfterError();
106
- program.addHelpText('afterAll', '\nStart here: run `playdrop doctor` for setup, or `playdrop getting-started`, `playdrop faq`, or `playdrop changelog`.\n');
107
- program.on('command:*', (unknownCommands) => {
106
+ program.addHelpText("afterAll", "\nStart here: run `playdrop doctor` for setup, or `playdrop getting-started`, `playdrop faq`, or `playdrop changelog`.\n");
107
+ program.on("command:*", (unknownCommands) => {
108
108
  const [unknownCommand] = unknownCommands;
109
109
  if (unknownCommand) {
110
110
  printRemovedCommandHint(unknownCommand);
@@ -112,21 +112,21 @@ program.on('command:*', (unknownCommands) => {
112
112
  process.exitCode = 1;
113
113
  });
114
114
  function createEnvOption() {
115
- return new commander_1.Option('--env <env>', 'Environment (dev|local|prod|preview)').default('prod');
115
+ return new commander_1.Option("--env <env>", "Environment (dev|local|prod|preview)").default("prod");
116
116
  }
117
117
  function collectRepeatedOption(value, previous = []) {
118
118
  return [...previous, value];
119
119
  }
120
120
  function registerLoginCommand(parent) {
121
121
  parent
122
- .command('login')
123
- .description('Log in to Playdrop')
122
+ .command("login")
123
+ .description("Log in to Playdrop")
124
124
  .addOption(createEnvOption())
125
- .option('--username <username>', 'Username for direct login')
126
- .option('--password <password>', 'Password for direct login')
127
- .option('--key <apiKey>', 'API key for direct login')
128
- .option('--handoff-token <token>', 'Native app handoff token for direct login')
129
- .option('--json', 'Output JSON')
125
+ .option("--username <username>", "Username for direct login")
126
+ .option("--password <password>", "Password for direct login")
127
+ .option("--key <apiKey>", "API key for direct login")
128
+ .option("--handoff-token <token>", "Native app handoff token for direct login")
129
+ .option("--json", "Output JSON")
130
130
  .action(async (opts) => {
131
131
  await (0, login_1.login)(opts.env, {
132
132
  username: opts.username,
@@ -139,36 +139,36 @@ function registerLoginCommand(parent) {
139
139
  }
140
140
  function registerLogoutCommand(parent) {
141
141
  parent
142
- .command('logout')
143
- .description('Log out of Playdrop')
144
- .argument('[username]', 'Username to log out')
145
- .option('--env <env>', 'Environment for targeted logout')
142
+ .command("logout")
143
+ .description("Log out of Playdrop")
144
+ .argument("[username]", "Username to log out")
145
+ .option("--env <env>", "Environment for targeted logout")
146
146
  .action((username, opts) => {
147
147
  (0, logout_1.logout)({ username, env: opts.env });
148
148
  });
149
149
  }
150
150
  function registerWhoamiCommand(parent) {
151
151
  parent
152
- .command('whoami')
153
- .description('Show the resolved account for this workspace')
154
- .option('--env <env>', 'Resolve this command against one logged-in environment')
152
+ .command("whoami")
153
+ .description("Show the resolved account for this workspace")
154
+ .option("--env <env>", "Resolve this command against one logged-in environment")
155
155
  .action(async (opts) => {
156
156
  await (0, whoami_1.whoami)({ env: opts.env });
157
157
  });
158
158
  }
159
159
  function registerAccountsCommand(parent) {
160
160
  parent
161
- .command('accounts')
162
- .description('List stored Playdrop accounts')
161
+ .command("accounts")
162
+ .description("List stored Playdrop accounts")
163
163
  .action(() => {
164
164
  (0, accounts_1.listAccounts)();
165
165
  });
166
166
  }
167
167
  function registerUseAccountCommand(parent) {
168
168
  parent
169
- .command('use <username>')
170
- .description('Switch the default Playdrop account')
171
- .option('--env <env>', 'Environment for the selected account')
169
+ .command("use <username>")
170
+ .description("Switch the default Playdrop account")
171
+ .option("--env <env>", "Environment for the selected account")
172
172
  .action((username, opts) => {
173
173
  (0, accounts_1.useAccount)(username, opts.env);
174
174
  });
@@ -176,16 +176,16 @@ function registerUseAccountCommand(parent) {
176
176
  registerLoginCommand(program);
177
177
  registerLogoutCommand(program);
178
178
  registerWhoamiCommand(program);
179
- const worker = program.command('worker').description('Run a PlayDrop agent worker on this machine');
179
+ const worker = program.command("worker").description("Run a PlayDrop agent worker on this machine");
180
180
  worker
181
- .command('start')
182
- .description('Start the PlayDrop worker and poll for agent tasks')
183
- .option('--env <env>', 'Resolve this command against one logged-in environment')
184
- .option('--once', 'Process at most one task then exit')
185
- .option('--name <name>', 'Worker display name override')
186
- .option('--supervisor <type>', 'Worker supervisor type: app, launchagent, or terminal', 'terminal')
187
- .option('--supervise-stdin', 'Exit with a bounded shutdown when stdin closes')
188
- .option('--dev-plugin-working-tree <path>', 'DEV ONLY: stage task plugin files from this working tree')
181
+ .command("start")
182
+ .description("Start the PlayDrop worker and poll for agent tasks")
183
+ .option("--env <env>", "Resolve this command against one logged-in environment")
184
+ .option("--once", "Process at most one task then exit")
185
+ .option("--name <name>", "Worker display name override")
186
+ .option("--supervisor <type>", "Worker supervisor type: app, launchagent, or terminal", "terminal")
187
+ .option("--supervise-stdin", "Exit with a bounded shutdown when stdin closes")
188
+ .option("--dev-plugin-working-tree <path>", "DEV ONLY: stage task plugin files from this working tree")
189
189
  .action(async (opts) => {
190
190
  await (0, worker_1.startWorker)({
191
191
  env: opts.env,
@@ -197,10 +197,10 @@ worker
197
197
  });
198
198
  });
199
199
  worker
200
- .command('status')
201
- .description('Show local and server worker readiness')
202
- .option('--env <env>', 'Resolve this command against one logged-in environment')
203
- .option('--json', 'Output JSON')
200
+ .command("status")
201
+ .description("Show local and server worker readiness")
202
+ .option("--env <env>", "Resolve this command against one logged-in environment")
203
+ .option("--json", "Output JSON")
204
204
  .action(async (opts) => {
205
205
  await (0, worker_1.showWorkerStatus)({
206
206
  env: opts.env,
@@ -208,12 +208,12 @@ worker
208
208
  });
209
209
  });
210
210
  worker
211
- .command('setup')
212
- .description('Prepare this machine for PlayDrop worker execution')
213
- .option('--env <env>', 'Resolve this command against one logged-in environment')
214
- .option('--name <name>', 'Worker display name override')
215
- .option('--no-start', 'Write managed worker files without starting or restarting LaunchAgent')
216
- .option('--restart', 'Restart the managed worker when it is safe')
211
+ .command("setup")
212
+ .description("Prepare this machine for PlayDrop worker execution")
213
+ .option("--env <env>", "Resolve this command against one logged-in environment")
214
+ .option("--name <name>", "Worker display name override")
215
+ .option("--no-start", "Write managed worker files without starting or restarting LaunchAgent")
216
+ .option("--restart", "Restart the managed worker when it is safe")
217
217
  .action(async (opts) => {
218
218
  await (0, worker_1.setupWorker)({
219
219
  env: opts.env,
@@ -222,158 +222,164 @@ worker
222
222
  restart: opts.restart,
223
223
  });
224
224
  });
225
- const task = program.command('task').description('Report agent task progress from a worker workspace');
225
+ const task = program.command("task").description("Report agent task progress from a worker workspace");
226
226
  task
227
- .command('context')
228
- .description('Print the active task metadata and original user request')
227
+ .command("context")
228
+ .description("Print the active task metadata and original user request")
229
229
  .action(() => {
230
230
  (0, worker_1.showTaskContext)();
231
231
  });
232
232
  task
233
- .command('report')
234
- .description('Post progress for the active agent task')
235
- .option('--phase <phase>', 'Task phase')
236
- .option('--done <done>', 'What was just completed')
237
- .option('--current <current>', 'What is happening now')
238
- .option('--pct <number>', 'Legacy percent complete, 0 to 100')
239
- .option('-m, --message <message>', 'Progress message')
240
- .option('--env <env>', 'Environment override')
241
- .option('--kind <kind>', 'progress')
233
+ .command("asset-runtime")
234
+ .description("Prepare the pinned transparent-asset extraction runtime for this task")
235
+ .action(async () => {
236
+ await (0, worker_1.prepareAssetRuntimeTask)();
237
+ });
238
+ task
239
+ .command("report")
240
+ .description("Post progress for the active agent task")
241
+ .option("--phase <phase>", "Task phase")
242
+ .option("--done <done>", "What was just completed")
243
+ .option("--current <current>", "What is happening now")
244
+ .option("--pct <number>", "Legacy percent complete, 0 to 100")
245
+ .option("-m, --message <message>", "Progress message")
246
+ .option("--env <env>", "Environment override")
247
+ .option("--kind <kind>", "progress")
242
248
  .action(async (opts) => {
243
249
  await (0, worker_1.reportTask)(opts);
244
250
  });
245
251
  task
246
- .command('report-catalogue')
247
- .description('Post a catalogue.json preview for the active agent task')
248
- .requiredOption('--file <path>', 'Path to catalogue.json')
249
- .requiredOption('-m, --message <message>', 'Preview message')
250
- .option('--env <env>', 'Environment override')
252
+ .command("report-catalogue")
253
+ .description("Post a catalogue.json preview for the active agent task")
254
+ .requiredOption("--file <path>", "Path to catalogue.json")
255
+ .requiredOption("-m, --message <message>", "Preview message")
256
+ .option("--env <env>", "Environment override")
251
257
  .action(async (opts) => {
252
258
  await (0, worker_1.reportCatalogueTask)(opts);
253
259
  });
254
260
  task
255
- .command('material')
256
- .description('Share a visual build artifact in the creator conversation')
257
- .requiredOption('--file <path>', 'PNG, JPEG, WebP, MP4, or WebM file')
258
- .requiredOption('--title <text>', 'Creator-facing title, one to three words')
259
- .option('--poster <path>', 'Poster image for a video')
260
- .option('--asset', 'Present a transparent isolated asset without cropping')
261
- .option('--phase <phase>', 'Task phase that produced the material')
262
- .option('--env <env>', 'Environment override')
261
+ .command("material")
262
+ .description("Share a visual build artifact in the creator conversation")
263
+ .requiredOption("--file <path>", "PNG, JPEG, WebP, MP4, or WebM file")
264
+ .requiredOption("--title <text>", "Creator-facing title, one to three words")
265
+ .option("--poster <path>", "Poster image for a video")
266
+ .option("--asset", "Present a transparent isolated asset without cropping")
267
+ .option("--phase <phase>", "Task phase that produced the material")
268
+ .option("--env <env>", "Environment override")
263
269
  .action(async (opts) => {
264
270
  await (0, worker_1.materialTask)(opts);
265
271
  });
266
272
  task
267
- .command('claim-slug')
268
- .description('Claim the app slug for the active game creation task')
269
- .requiredOption('--app-name <slug>', 'Claimed app slug')
270
- .requiredOption('--display-name <name>', 'Human-readable game title')
271
- .option('--subtitle <subtitle>', 'Short game subtitle')
272
- .option('--primary-surface <surface>', 'DESKTOP, MOBILE_LANDSCAPE, or MOBILE_PORTRAIT')
273
- .option('--env <env>', 'Environment override')
273
+ .command("claim-slug")
274
+ .description("Claim the app slug for the active game creation task")
275
+ .requiredOption("--app-name <slug>", "Claimed app slug")
276
+ .requiredOption("--display-name <name>", "Human-readable game title")
277
+ .option("--subtitle <subtitle>", "Short game subtitle")
278
+ .option("--primary-surface <surface>", "DESKTOP, MOBILE_LANDSCAPE, or MOBILE_PORTRAIT")
279
+ .option("--env <env>", "Environment override")
274
280
  .action(async (opts) => {
275
281
  await (0, worker_1.claimSlugTask)(opts);
276
282
  });
277
283
  task
278
- .command('upload')
279
- .description('Upload the active agent task project as a private draft')
280
- .option('--preflight-only', 'Run non-mutating checks without uploading')
281
- .option('--env <env>', 'Environment override')
284
+ .command("upload")
285
+ .description("Upload the active agent task project as a private draft")
286
+ .option("--preflight-only", "Run non-mutating checks without uploading")
287
+ .option("--env <env>", "Environment override")
282
288
  .action(async (opts) => {
283
289
  await (0, worker_1.uploadTask)(opts);
284
290
  });
285
291
  task
286
- .command('done')
287
- .description('Mark the active agent task done after upload')
288
- .requiredOption('--summary <summary>', 'One-sentence creator-facing recap of what was built')
289
- .option('--next-steps <path>', 'JSON file with up to three next-step suggestions')
290
- .option('--platform-feedback-file <path>', 'Markdown feedback about the PlayDrop platform')
291
- .option('--env <env>', 'Environment override')
292
+ .command("done")
293
+ .description("Mark the active agent task done after upload")
294
+ .requiredOption("--summary <summary>", "One-sentence creator-facing recap of what was built")
295
+ .option("--next-steps <path>", "JSON file with up to three next-step suggestions")
296
+ .option("--platform-feedback-file <path>", "Markdown feedback about the PlayDrop platform")
297
+ .option("--env <env>", "Environment override")
292
298
  .action(async (opts) => {
293
299
  await (0, worker_1.completeTask)(opts);
294
300
  });
295
301
  task
296
- .command('submit-review')
297
- .description('Submit the active game review task result')
298
- .requiredOption('--state <state>', 'Review outcome: Blocked, Limited, Passed, Good, or Excellent')
299
- .requiredOption('--message-file <path>', 'Internal assessment file')
300
- .option('--creator-feedback-file <path>', 'Creator feedback file')
301
- .option('--platform-feedback-file <path>', 'Markdown feedback about the PlayDrop platform')
302
- .requiredOption('--evidence-dir <path>', 'Review evidence directory')
303
- .option('--next-steps <path>', 'JSON file with up to three next-step suggestions')
304
- .option('--env <env>', 'Environment override')
302
+ .command("submit-review")
303
+ .description("Submit the active game review task result")
304
+ .requiredOption("--state <state>", "Review outcome: Blocked, Limited, Passed, Good, or Excellent")
305
+ .requiredOption("--message-file <path>", "Internal assessment file")
306
+ .option("--creator-feedback-file <path>", "Creator feedback file")
307
+ .option("--platform-feedback-file <path>", "Markdown feedback about the PlayDrop platform")
308
+ .requiredOption("--evidence-dir <path>", "Review evidence directory")
309
+ .option("--next-steps <path>", "JSON file with up to three next-step suggestions")
310
+ .option("--env <env>", "Environment override")
305
311
  .action(async (opts) => {
306
312
  await (0, worker_1.submitReviewTask)(opts);
307
313
  });
308
314
  task
309
- .command('submit-eval')
310
- .description('Submit the active game eval task result')
311
- .requiredOption('--result-file <path>', 'Strict GAME_EVAL JSON result file')
312
- .requiredOption('--evidence-dir <paths...>', 'One instrument evidence directory per eval target')
313
- .option('--env <env>', 'Environment override')
315
+ .command("submit-eval")
316
+ .description("Submit the active game eval task result")
317
+ .requiredOption("--result-file <path>", "Strict GAME_EVAL JSON result file")
318
+ .requiredOption("--evidence-dir <paths...>", "One instrument evidence directory per eval target")
319
+ .option("--env <env>", "Environment override")
314
320
  .action(async (opts) => {
315
321
  await (0, worker_1.submitEvalTask)(opts);
316
322
  });
317
323
  task
318
- .command('evidence')
319
- .description('Persist the screenshot you just took as task evidence')
320
- .requiredOption('--name <name>', 'Evidence state: first-frame, core, win, or loss')
321
- .option('--screenshot-id <id>', 'Screenshot id; omit to persist the capture you just took')
322
- .requiredOption('--evidence-dir <path>', 'Evidence output directory')
323
- .option('--group <id>', 'Evidence group id; required for GAME_EVAL')
324
+ .command("evidence")
325
+ .description("Persist the screenshot you just took as task evidence")
326
+ .requiredOption("--name <name>", "Evidence state: first-frame, core, win, or loss")
327
+ .option("--screenshot-id <id>", "Screenshot id; omit to persist the capture you just took")
328
+ .requiredOption("--evidence-dir <path>", "Evidence output directory")
329
+ .option("--group <id>", "Evidence group id; required for GAME_EVAL")
324
330
  .action(async (opts) => {
325
331
  await (0, worker_1.saveTaskEvidence)(opts);
326
332
  });
327
333
  task
328
- .command('instrument-error')
329
- .description('Terminate a review or eval task with a structured instrument error')
330
- .requiredOption('--reason <reason>', 'auth_state, browser_control, renderer, or screenshot')
331
- .option('--env <env>', 'Environment override')
334
+ .command("instrument-error")
335
+ .description("Terminate a review or eval task with a structured instrument error")
336
+ .requiredOption("--reason <reason>", "auth_state, browser_control, renderer, or screenshot")
337
+ .option("--env <env>", "Environment override")
332
338
  .action(async (opts) => {
333
339
  await (0, worker_1.instrumentErrorTask)(opts);
334
340
  });
335
341
  task
336
- .command('fail')
337
- .description('Fail the active agent task')
338
- .requiredOption('-m, --message <message>', 'Creator-facing failure message')
339
- .option('--retryable-with-same-input', 'Allow retrying the exact same request without creator changes')
340
- .option('--platform-feedback-file <path>', 'Markdown feedback about the PlayDrop platform')
341
- .option('--env <env>', 'Environment override')
342
+ .command("fail")
343
+ .description("Fail the active agent task")
344
+ .requiredOption("-m, --message <message>", "Creator-facing failure message")
345
+ .option("--retryable-with-same-input", "Allow retrying the exact same request without creator changes")
346
+ .option("--platform-feedback-file <path>", "Markdown feedback about the PlayDrop platform")
347
+ .option("--env <env>", "Environment override")
342
348
  .action(async (opts) => {
343
349
  await (0, worker_1.failTask)(opts);
344
350
  });
345
- const review = program.command('review').description('Review helper commands for PlayDrop worker tasks');
351
+ const review = program.command("review").description("Review helper commands for PlayDrop worker tasks");
346
352
  review
347
- .command('validate-result')
348
- .description('Validate a canonical game review result')
349
- .requiredOption('--state <state>', 'Review outcome: Blocked, Limited, Passed, Good, or Excellent')
350
- .requiredOption('--message-file <path>', 'Internal assessment file')
351
- .option('--creator-feedback-file <path>', 'Creator feedback file')
352
- .requiredOption('--evidence-dir <path>', 'Review evidence directory')
353
+ .command("validate-result")
354
+ .description("Validate a canonical game review result")
355
+ .requiredOption("--state <state>", "Review outcome: Blocked, Limited, Passed, Good, or Excellent")
356
+ .requiredOption("--message-file <path>", "Internal assessment file")
357
+ .option("--creator-feedback-file <path>", "Creator feedback file")
358
+ .requiredOption("--evidence-dir <path>", "Review evidence directory")
353
359
  .action(async (opts) => {
354
360
  await (0, review_1.validateReviewResultCommand)(opts);
355
361
  });
356
362
  review
357
- .command('compose-evidence')
358
- .description('Compose review screenshots into one evidence image')
359
- .requiredOption('--core <path>', 'Core gameplay screenshot')
360
- .requiredOption('--win <path>', 'Win or progression screenshot')
361
- .requiredOption('--loss <path>', 'Loss or failure screenshot')
362
- .requiredOption('--out <path>', 'Output PNG path')
363
+ .command("compose-evidence")
364
+ .description("Compose review screenshots into one evidence image")
365
+ .requiredOption("--core <path>", "Core gameplay screenshot")
366
+ .requiredOption("--win <path>", "Win or progression screenshot")
367
+ .requiredOption("--loss <path>", "Loss or failure screenshot")
368
+ .requiredOption("--out <path>", "Output PNG path")
363
369
  .action(async (opts) => {
364
370
  await (0, review_1.composeReviewEvidence)(opts);
365
371
  });
366
372
  review
367
- .command('rating-card')
368
- .description('Render a review rating card PNG')
369
- .requiredOption('--review-message-file <path>', 'Internal assessment file')
370
- .requiredOption('--out <path>', 'Output PNG path')
371
- .option('--punchline <text>', 'Override punchline text')
372
- .option('--title <text>', 'Card title')
373
+ .command("rating-card")
374
+ .description("Render a review rating card PNG")
375
+ .requiredOption("--review-message-file <path>", "Internal assessment file")
376
+ .requiredOption("--out <path>", "Output PNG path")
377
+ .option("--punchline <text>", "Override punchline text")
378
+ .option("--title <text>", "Card title")
373
379
  .action(async (opts) => {
374
380
  await (0, review_1.createReviewRatingCard)(opts);
375
381
  });
376
- const auth = program.command('auth').description('Authentication commands');
382
+ const auth = program.command("auth").description("Authentication commands");
377
383
  registerLoginCommand(auth);
378
384
  registerLogoutCommand(auth);
379
385
  registerWhoamiCommand(auth);
@@ -381,616 +387,604 @@ registerAccountsCommand(auth);
381
387
  registerUseAccountCommand(auth);
382
388
  function addChatReadOptions(command) {
383
389
  return command
384
- .option('--env <env>', 'Resolve this command against one logged-in environment')
385
- .option('--json', 'Output JSON');
390
+ .option("--env <env>", "Resolve this command against one logged-in environment")
391
+ .option("--json", "Output JSON");
386
392
  }
387
393
  function addChatWriteOptions(command, allowClientKey = true) {
388
394
  command
389
- .option('--text <text>', 'Message text')
390
- .option('--text-file <path>', 'Read message text from a file')
391
- .option('--file <path>', 'Attach a file', collectRepeatedOption, [])
392
- .option('--link <url>', 'Attach an HTTPS link', collectRepeatedOption, [])
393
- .option('--event-type <type>', 'Structured event type')
394
- .option('--event-data-file <path>', 'Read structured event JSON from a file')
395
- .option('--as-system', 'Publish as playdrop-system (admin only)');
395
+ .option("--text <text>", "Message text")
396
+ .option("--text-file <path>", "Read message text from a file")
397
+ .option("--file <path>", "Attach a file", collectRepeatedOption, [])
398
+ .option("--link <url>", "Attach an HTTPS link", collectRepeatedOption, [])
399
+ .option("--event-type <type>", "Structured event type")
400
+ .option("--event-data-file <path>", "Read structured event JSON from a file")
401
+ .option("--as-system", "Publish as playdrop-system (admin only)");
396
402
  if (allowClientKey)
397
- command.option('--client-key <key>', 'Idempotency key within the channel');
403
+ command.option("--client-key <key>", "Idempotency key within the channel");
398
404
  return addChatReadOptions(command);
399
405
  }
400
- const chat = program.command('chat').description('Read and write PlayDrop Chat');
401
- addChatReadOptions(chat.command('channels').description('List accessible channels'))
402
- .action(chat_1.listChatChannels);
403
- addChatReadOptions(chat.command('read <channel>').description('Read channel messages'))
404
- .action(chat_1.readChatChannel);
405
- addChatReadOptions(chat.command('thread <message-id>').description('Read a message thread'))
406
- .action(chat_1.readChatThread);
407
- addChatWriteOptions(chat.command('send <channel>').description('Send a channel message'))
408
- .action(chat_1.sendChatMessage);
409
- addChatWriteOptions(chat.command('reply <message-id>').description('Reply to a root message'))
410
- .action(chat_1.replyChatMessage);
411
- addChatWriteOptions(chat.command('edit <message-id>').description('Edit a message'), false)
412
- .action(chat_1.editChatMessage);
413
- addChatReadOptions(chat.command('react <message-id> <emoji>').description('Add a reaction'))
414
- .action(chat_1.reactChatMessage);
415
- addChatReadOptions(chat.command('unreact <message-id> <emoji>').description('Remove a reaction'))
416
- .action(chat_1.unreactChatMessage);
417
- const chatAccess = chat.command('access').description('Manage channel access');
418
- addChatReadOptions(chatAccess.command('grant <channel> <username>').description('Grant channel access').option('--read-only', 'Grant read access without write access'))
419
- .action(chat_1.grantChatAccess);
420
- addChatReadOptions(chatAccess.command('revoke <channel> <username>').description('Revoke channel access'))
421
- .action(chat_1.revokeChatAccess);
422
- addChatReadOptions(chat.command('visibility <channel> <visibility>').description('Set public or admin-only visibility'))
423
- .action(chat_1.setChatVisibility);
406
+ const chat = program.command("chat").description("Read and write PlayDrop Chat");
407
+ addChatReadOptions(chat.command("channels").description("List accessible channels")).action(chat_1.listChatChannels);
408
+ addChatReadOptions(chat.command("read <channel>").description("Read channel messages")).action(chat_1.readChatChannel);
409
+ addChatReadOptions(chat.command("thread <message-id>").description("Read a message thread")).action(chat_1.readChatThread);
410
+ addChatWriteOptions(chat.command("send <channel>").description("Send a channel message")).action(chat_1.sendChatMessage);
411
+ addChatWriteOptions(chat.command("reply <message-id>").description("Reply to a root message")).action(chat_1.replyChatMessage);
412
+ addChatWriteOptions(chat.command("edit <message-id>").description("Edit a message"), false).action(chat_1.editChatMessage);
413
+ addChatReadOptions(chat.command("react <message-id> <emoji>").description("Add a reaction")).action(chat_1.reactChatMessage);
414
+ addChatReadOptions(chat.command("unreact <message-id> <emoji>").description("Remove a reaction")).action(chat_1.unreactChatMessage);
415
+ const chatAccess = chat.command("access").description("Manage channel access");
416
+ addChatReadOptions(chatAccess
417
+ .command("grant <channel> <username>")
418
+ .description("Grant channel access")
419
+ .option("--read-only", "Grant read access without write access")).action(chat_1.grantChatAccess);
420
+ addChatReadOptions(chatAccess.command("revoke <channel> <username>").description("Revoke channel access")).action(chat_1.revokeChatAccess);
421
+ addChatReadOptions(chat.command("visibility <channel> <visibility>").description("Set public or admin-only visibility")).action(chat_1.setChatVisibility);
424
422
  program
425
- .command('doctor')
426
- .description('Check PlayDrop setup health')
427
- .option('--section <section>', 'clients, agents, or workspaces')
428
- .option('--json', 'Output JSON')
423
+ .command("doctor")
424
+ .description("Check PlayDrop setup health")
425
+ .option("--section <section>", "clients, agents, or workspaces")
426
+ .option("--json", "Output JSON")
429
427
  .action(async (opts) => {
430
428
  await (0, doctor_1.showDoctor)({ section: opts.section, json: opts.json });
431
429
  });
432
- const clients = program.command('clients').description('Manage the PlayDrop native client');
433
- clients
434
- .action(async () => {
430
+ const clients = program.command("clients").description("Manage the PlayDrop native client");
431
+ clients.action(async () => {
435
432
  await (0, clients_1.showClientStatus)();
436
433
  });
437
434
  clients
438
- .command('status')
439
- .description('Show native client status')
440
- .option('--json', 'Output JSON')
435
+ .command("status")
436
+ .description("Show native client status")
437
+ .option("--json", "Output JSON")
441
438
  .action(async (opts) => {
442
439
  await (0, clients_1.showClientStatus)({ json: opts.json });
443
440
  });
444
441
  clients
445
- .command('install')
446
- .description('Install the PlayDrop native client')
442
+ .command("install")
443
+ .description("Install the PlayDrop native client")
447
444
  .action(async () => {
448
445
  await (0, clients_1.installClient)();
449
446
  });
450
447
  clients
451
- .command('launch')
452
- .description('Launch the PlayDrop native client')
448
+ .command("launch")
449
+ .description("Launch the PlayDrop native client")
453
450
  .action(async () => {
454
451
  await (0, clients_1.launchClient)();
455
452
  });
456
453
  clients
457
- .command('update')
458
- .description('Update the PlayDrop native client')
454
+ .command("update")
455
+ .description("Update the PlayDrop native client")
459
456
  .action(async () => {
460
457
  await (0, clients_1.updateClient)();
461
458
  });
462
- const agents = program.command('agents').description('Manage coding agents and PlayDrop plugins');
463
- agents
464
- .action(async () => {
459
+ const agents = program.command("agents").description("Manage coding agents and PlayDrop plugins");
460
+ agents.action(async () => {
465
461
  await (0, agents_1.showAgentsStatus)();
466
462
  });
467
463
  agents
468
- .command('status')
469
- .description('Show coding agent and plugin status')
470
- .option('--json', 'Output JSON')
464
+ .command("status")
465
+ .description("Show coding agent and plugin status")
466
+ .option("--json", "Output JSON")
471
467
  .action(async (opts) => {
472
468
  await (0, agents_1.showAgentsStatus)({ json: opts.json });
473
469
  });
474
470
  agents
475
- .command('install-plugin <agent>')
476
- .description('Install the PlayDrop plugin for codex or claude; show manual Cursor steps')
471
+ .command("install-plugin <agent>")
472
+ .description("Install the PlayDrop plugin for codex or claude; show manual Cursor steps")
477
473
  .action(async (agent) => {
478
474
  await (0, agents_1.installPlugin)(agent);
479
475
  });
480
476
  agents
481
- .command('update-plugin <agent>')
482
- .description('Update the PlayDrop plugin for codex or claude; show manual Cursor steps')
477
+ .command("update-plugin <agent>")
478
+ .description("Update the PlayDrop plugin for codex or claude; show manual Cursor steps")
483
479
  .action(async (agent) => {
484
480
  await (0, agents_1.updatePlugin)(agent);
485
481
  });
486
- const workspaces = program.command('workspaces').description('Manage local PlayDrop workspaces');
487
- workspaces
488
- .action(async () => {
482
+ const workspaces = program.command("workspaces").description("Manage local PlayDrop workspaces");
483
+ workspaces.action(async () => {
489
484
  await (0, workspaces_1.listWorkspaces)();
490
485
  });
491
486
  workspaces
492
- .command('list')
493
- .description('List cached PlayDrop workspaces')
494
- .option('--json', 'Output JSON')
487
+ .command("list")
488
+ .description("List cached PlayDrop workspaces")
489
+ .option("--json", "Output JSON")
495
490
  .action(async (opts) => {
496
491
  await (0, workspaces_1.listWorkspaces)({ json: opts.json });
497
492
  });
498
493
  workspaces
499
- .command('init [path]')
500
- .description('Initialize a PlayDrop workspace')
501
- .option('--json', 'Output JSON')
494
+ .command("init [path]")
495
+ .description("Initialize a PlayDrop workspace")
496
+ .option("--json", "Output JSON")
502
497
  .action(async (pathArg, opts) => {
503
498
  await (0, workspaces_1.initWorkspace)(pathArg, { json: opts.json });
504
499
  });
505
500
  workspaces
506
- .command('inspect [path]')
507
- .description('Inspect one PlayDrop workspace')
508
- .option('--json', 'Output JSON')
501
+ .command("inspect [path]")
502
+ .description("Inspect one PlayDrop workspace")
503
+ .option("--json", "Output JSON")
509
504
  .action(async (pathArg, opts) => {
510
505
  await (0, workspaces_1.inspectWorkspace)(pathArg, { json: opts.json });
511
506
  });
512
507
  workspaces
513
- .command('refresh [roots...]')
514
- .description('Scan explicit roots for PlayDrop workspaces')
515
- .option('--json', 'Output JSON')
508
+ .command("refresh [roots...]")
509
+ .description("Scan explicit roots for PlayDrop workspaces")
510
+ .option("--json", "Output JSON")
516
511
  .action(async (roots, opts) => {
517
512
  await (0, workspaces_1.refreshWorkspaces)(roots ?? [], { json: opts.json });
518
513
  });
519
- const browseCommand = program.command('browse').description('Browse public content');
514
+ const browseCommand = program.command("browse").description("Browse public content");
520
515
  browseCommand
521
- .option('--kind <kind>', 'app, asset, asset-pack, asset-spec, or all')
522
- .option('--creator <creator>', 'all, me, or a creator slug')
523
- .option('--app-type <type>', 'game, demo, tool, or template')
524
- .option('--auth <value>', 'App auth filter: required, optional, or none')
525
- .option('--surface <value>', 'App surface filter: desktop, mobile-portrait, or mobile-landscape')
526
- .option('--controller <value>', 'App controller filter: required, optional, or none')
527
- .option('--asset-category <category>', 'Asset category filter')
528
- .option('--asset-subcategory <subcategory>', 'Asset subcategory filter')
529
- .option('--asset-spec <ref>', 'Asset spec family or version filter for assets')
530
- .option('--asset-spec-owner <creator>', 'Asset spec owner filter for assets')
531
- .option('--asset-spec-name <name>', 'Asset spec name filter for assets')
532
- .option('--sort <sort>', 'Sort app, asset, or asset-spec browse results')
533
- .option('--limit <number>', 'Maximum number of results to return')
534
- .option('--offset <number>', 'Result offset')
535
- .option('--tag <ref>', 'Filter by canonical tag ref', collectRepeatedOption, [])
536
- .option('--json', 'Output JSON')
516
+ .option("--kind <kind>", "app, asset, asset-pack, asset-spec, or all")
517
+ .option("--creator <creator>", "all, me, or a creator slug")
518
+ .option("--app-type <type>", "game, demo, tool, or template")
519
+ .option("--auth <value>", "App auth filter: required, optional, or none")
520
+ .option("--surface <value>", "App surface filter: desktop, mobile-portrait, or mobile-landscape")
521
+ .option("--controller <value>", "App controller filter: required, optional, or none")
522
+ .option("--asset-category <category>", "Asset category filter")
523
+ .option("--asset-subcategory <subcategory>", "Asset subcategory filter")
524
+ .option("--asset-spec <ref>", "Asset spec family or version filter for assets")
525
+ .option("--asset-spec-owner <creator>", "Asset spec owner filter for assets")
526
+ .option("--asset-spec-name <name>", "Asset spec name filter for assets")
527
+ .option("--sort <sort>", "Sort app, asset, or asset-spec browse results")
528
+ .option("--limit <number>", "Maximum number of results to return")
529
+ .option("--offset <number>", "Result offset")
530
+ .option("--tag <ref>", "Filter by canonical tag ref", collectRepeatedOption, [])
531
+ .option("--json", "Output JSON")
537
532
  .action(async (opts) => {
538
533
  await (0, browse_1.browse)(opts);
539
534
  });
540
535
  browseCommand
541
- .command('categories')
542
- .description('Browse asset category definitions')
543
- .option('--json', 'Output JSON')
536
+ .command("categories")
537
+ .description("Browse asset category definitions")
538
+ .option("--json", "Output JSON")
544
539
  .action(async (opts) => {
545
540
  await (0, browse_1.browseCategories)(opts);
546
541
  });
547
542
  program
548
- .command('search [query]')
549
- .description('Search public content')
550
- .option('--kind <kind>', 'app, asset, asset-pack, asset-spec, or all')
551
- .option('--creator <creator>', 'creator username filter')
552
- .option('--app-type <type>', 'game, demo, tool, or template')
553
- .option('--auth <value>', 'App auth filter: required, optional, or none')
554
- .option('--surface <value>', 'App surface filter: desktop, mobile-portrait, or mobile-landscape')
555
- .option('--controller <value>', 'App controller filter: required, optional, or none')
556
- .option('--asset-category <category>', 'Asset category filter')
557
- .option('--asset-subcategory <subcategory>', 'Asset subcategory filter')
558
- .option('--asset-spec <ref>', 'Asset spec family or version filter for assets')
559
- .option('--asset-spec-owner <creator>', 'Asset spec owner filter for assets')
560
- .option('--asset-spec-name <name>', 'Asset spec name filter for assets')
561
- .option('--sort <sort>', 'Sort search results')
562
- .option('--pack-contains-category <category>', 'Asset pack category filter')
563
- .option('--pack-contains-subcategory <subcategory>', 'Asset pack subcategory filter')
564
- .option('--limit <number>', 'Maximum number of results to return')
565
- .option('--offset <number>', 'Result offset')
566
- .option('--tag <ref>', 'Filter by canonical tag ref', collectRepeatedOption, [])
567
- .option('--json', 'Output JSON')
543
+ .command("search [query]")
544
+ .description("Search public content")
545
+ .option("--kind <kind>", "app, asset, asset-pack, asset-spec, or all")
546
+ .option("--creator <creator>", "creator username filter")
547
+ .option("--app-type <type>", "game, demo, tool, or template")
548
+ .option("--auth <value>", "App auth filter: required, optional, or none")
549
+ .option("--surface <value>", "App surface filter: desktop, mobile-portrait, or mobile-landscape")
550
+ .option("--controller <value>", "App controller filter: required, optional, or none")
551
+ .option("--asset-category <category>", "Asset category filter")
552
+ .option("--asset-subcategory <subcategory>", "Asset subcategory filter")
553
+ .option("--asset-spec <ref>", "Asset spec family or version filter for assets")
554
+ .option("--asset-spec-owner <creator>", "Asset spec owner filter for assets")
555
+ .option("--asset-spec-name <name>", "Asset spec name filter for assets")
556
+ .option("--sort <sort>", "Sort search results")
557
+ .option("--pack-contains-category <category>", "Asset pack category filter")
558
+ .option("--pack-contains-subcategory <subcategory>", "Asset pack subcategory filter")
559
+ .option("--limit <number>", "Maximum number of results to return")
560
+ .option("--offset <number>", "Result offset")
561
+ .option("--tag <ref>", "Filter by canonical tag ref", collectRepeatedOption, [])
562
+ .option("--json", "Output JSON")
568
563
  .action(async (query, opts) => {
569
564
  await (0, search_1.search)(query, opts);
570
565
  });
571
- const tags = program.command('tags').description('Browse and inspect tags');
566
+ const tags = program.command("tags").description("Browse and inspect tags");
572
567
  tags
573
- .command('browse')
574
- .description('Browse public tags')
575
- .option('--group <slug>', 'Filter to one tag group')
576
- .option('--kind <kind>', 'Filter to one target kind')
577
- .option('--json', 'Output JSON')
568
+ .command("browse")
569
+ .description("Browse public tags")
570
+ .option("--group <slug>", "Filter to one tag group")
571
+ .option("--kind <kind>", "Filter to one target kind")
572
+ .option("--json", "Output JSON")
578
573
  .action(async (opts) => {
579
574
  await (0, tags_1.browseTags)(opts);
580
575
  });
581
576
  program
582
- .command('detail <ref>')
583
- .description('Show one app, asset, or asset pack')
584
- .option('--json', 'Output JSON')
577
+ .command("detail <ref>")
578
+ .description("Show one app, asset, or asset pack")
579
+ .option("--json", "Output JSON")
585
580
  .action(async (ref, opts) => {
586
581
  await (0, detail_1.detail)(ref, opts);
587
582
  });
588
583
  program
589
- .command('play <ref>')
590
- .description('Open one published app in your browser with your current session')
591
- .option('--json', 'Output JSON')
584
+ .command("play <ref>")
585
+ .description("Open one published app in your browser with your current session")
586
+ .option("--json", "Output JSON")
592
587
  .action(async (ref, opts) => {
593
588
  await (0, play_1.play)(ref, opts);
594
589
  });
595
- const comments = program.command('comments').description('Comments for apps, assets, and asset packs');
590
+ const comments = program.command("comments").description("Comments for apps, assets, and asset packs");
596
591
  comments
597
- .command('browse <ref>')
598
- .description('Browse comments for one item')
599
- .option('--json', 'Output JSON')
592
+ .command("browse <ref>")
593
+ .description("Browse comments for one item")
594
+ .option("--json", "Output JSON")
600
595
  .action(async (ref, opts) => {
601
596
  await (0, comments_1.browseComments)(ref, opts);
602
597
  });
603
598
  comments
604
- .command('add <ref>')
605
- .description('Add a comment to one item')
606
- .requiredOption('--body <text>', 'Comment text')
607
- .option('--reply-to <commentId>', 'Parent comment id')
608
- .option('--json', 'Output JSON')
599
+ .command("add <ref>")
600
+ .description("Add a comment to one item")
601
+ .requiredOption("--body <text>", "Comment text")
602
+ .option("--reply-to <commentId>", "Parent comment id")
603
+ .option("--json", "Output JSON")
609
604
  .action(async (ref, opts) => {
610
605
  await (0, comments_1.addComment)(ref, opts);
611
606
  });
612
607
  comments
613
- .command('delete <commentId>')
614
- .description('Delete a comment')
615
- .option('--json', 'Output JSON')
608
+ .command("delete <commentId>")
609
+ .description("Delete a comment")
610
+ .option("--json", "Output JSON")
616
611
  .action(async (commentId, opts) => {
617
612
  await (0, comments_1.deleteComment)(commentId, opts);
618
613
  });
619
- const versions = program.command('versions').description('Version history');
614
+ const versions = program.command("versions").description("Version history");
620
615
  versions
621
- .command('browse <ref>')
622
- .description('Browse versions or revisions for one item')
623
- .option('--limit <number>', 'Maximum number of results to return')
624
- .option('--offset <number>', 'Result offset')
625
- .option('--json', 'Output JSON')
616
+ .command("browse <ref>")
617
+ .description("Browse versions or revisions for one item")
618
+ .option("--limit <number>", "Maximum number of results to return")
619
+ .option("--offset <number>", "Result offset")
620
+ .option("--json", "Output JSON")
626
621
  .action(async (ref, opts) => {
627
622
  await (0, versionsBrowse_1.browseVersions)(ref, opts);
628
623
  });
629
- const tweaks = program.command('tweaks').description('Read and replace version-scoped game tweaks');
624
+ const tweaks = program.command("tweaks").description("Read and replace version-scoped game tweaks");
630
625
  tweaks
631
- .command('get')
632
- .description('Read the current tweak state for an exact app version')
633
- .argument('<ref>', 'Exact ref: app:creator/name@x.y.z')
634
- .option('--json', 'Output JSON')
626
+ .command("get")
627
+ .description("Read the current tweak state for an exact app version")
628
+ .argument("<ref>", "Exact ref: app:creator/name@x.y.z")
629
+ .option("--json", "Output JSON")
635
630
  .action(async (ref, options) => {
636
631
  await (0, tweaks_1.getTweaks)(ref, options);
637
632
  });
638
633
  tweaks
639
- .command('replace')
640
- .description('Replace tweaks on the latest private app version')
641
- .argument('<ref>', 'Exact ref: app:creator/name@x.y.z')
642
- .requiredOption('--file <path>', 'JSON object containing the complete tweak values')
643
- .option('--json', 'Output JSON')
634
+ .command("replace")
635
+ .description("Replace tweaks on the latest private app version")
636
+ .argument("<ref>", "Exact ref: app:creator/name@x.y.z")
637
+ .requiredOption("--file <path>", "JSON object containing the complete tweak values")
638
+ .option("--json", "Output JSON")
644
639
  .action(async (ref, options) => {
645
640
  await (0, tweaks_1.replaceTweaks)(ref, options.file, options);
646
641
  });
647
- const notes = program.command('notes').description('Read and clear pending creator playtest notes');
642
+ const notes = program.command("notes").description("Read and clear pending creator playtest notes");
648
643
  notes
649
- .command('browse')
650
- .description('Browse pending playtest notes for an app')
651
- .argument('<ref>', 'Exact ref: app:creator/name@x.y.z')
652
- .option('--json', 'Output JSON')
653
- .option('--output <directory>', 'Materialize attachments and a notes.json manifest')
644
+ .command("browse")
645
+ .description("Browse pending playtest notes for an app")
646
+ .argument("<ref>", "Exact ref: app:creator/name@x.y.z")
647
+ .option("--json", "Output JSON")
648
+ .option("--output <directory>", "Materialize attachments and a notes.json manifest")
654
649
  .action(async (ref, options) => {
655
650
  await (0, notes_1.browseNotes)(ref, options);
656
651
  });
657
652
  notes
658
- .command('clear')
659
- .description('Clear explicit note IDs after incorporating them')
660
- .argument('<ref>', 'Exact ref: app:creator/name@x.y.z')
661
- .argument('<ids...>', 'One or more note IDs')
662
- .option('--json', 'Output JSON')
653
+ .command("clear")
654
+ .description("Clear explicit note IDs after incorporating them")
655
+ .argument("<ref>", "Exact ref: app:creator/name@x.y.z")
656
+ .argument("<ids...>", "One or more note IDs")
657
+ .option("--json", "Output JSON")
663
658
  .action(async (ref, ids, options) => {
664
659
  await (0, notes_1.clearNotes)(ref, ids, options);
665
660
  });
666
- const credits = program.command('credits').description('Credit balance and history');
661
+ const credits = program.command("credits").description("Credit balance and history");
667
662
  credits
668
- .command('balance')
669
- .description('Show your credit balance')
670
- .option('--json', 'Output JSON')
663
+ .command("balance")
664
+ .description("Show your credit balance")
665
+ .option("--json", "Output JSON")
671
666
  .action(async (opts) => {
672
667
  await (0, credits_1.showCreditBalance)(opts);
673
668
  });
674
669
  credits
675
- .command('transactions')
676
- .description('Browse your credit transactions')
677
- .option('--limit <number>', 'Maximum number of results to return')
678
- .option('--offset <number>', 'Result offset')
679
- .option('--json', 'Output JSON')
670
+ .command("transactions")
671
+ .description("Browse your credit transactions")
672
+ .option("--limit <number>", "Maximum number of results to return")
673
+ .option("--offset <number>", "Result offset")
674
+ .option("--json", "Output JSON")
680
675
  .action(async (opts) => {
681
676
  await (0, credits_1.browseCreditTransactions)(opts);
682
677
  });
683
678
  credits
684
- .command('earnings')
685
- .description('Show creator ad earnings and boost spend summary')
686
- .option('--days <number>', 'Number of days to include')
687
- .option('--app-id <number>', 'Filter to one app id')
688
- .option('--json', 'Output JSON')
679
+ .command("earnings")
680
+ .description("Show creator ad earnings and boost spend summary")
681
+ .option("--days <number>", "Number of days to include")
682
+ .option("--app-id <number>", "Filter to one app id")
683
+ .option("--json", "Output JSON")
689
684
  .action(async (opts) => {
690
685
  await (0, credits_1.showCreatorEarnings)(opts);
691
686
  });
692
- const ads = program.command('ads').description('Creator ad earnings and reporting');
687
+ const ads = program.command("ads").description("Creator ad earnings and reporting");
693
688
  ads
694
- .command('earnings')
695
- .description('Show ad earnings grouped by app and format')
696
- .option('--app <ref>', 'Filter to one app ref')
697
- .option('--days <number>', 'Number of days to include')
698
- .option('--json', 'Output JSON')
689
+ .command("earnings")
690
+ .description("Show ad earnings grouped by app and format")
691
+ .option("--app <ref>", "Filter to one app ref")
692
+ .option("--days <number>", "Number of days to include")
693
+ .option("--json", "Output JSON")
699
694
  .action(async (opts) => {
700
695
  await (0, ads_1.showAdsEarnings)(opts);
701
696
  });
702
697
  ads
703
- .command('report')
704
- .description('Show daily ad reporting buckets')
705
- .option('--app <ref>', 'Filter to one app ref')
706
- .option('--days <number>', 'Number of days to include')
707
- .option('--json', 'Output JSON')
698
+ .command("report")
699
+ .description("Show daily ad reporting buckets")
700
+ .option("--app <ref>", "Filter to one app ref")
701
+ .option("--days <number>", "Number of days to include")
702
+ .option("--json", "Output JSON")
708
703
  .action(async (opts) => {
709
704
  await (0, ads_1.showAdsReport)(opts);
710
705
  });
711
- const boosts = program.command('boosts').description('Buy, activate, and inspect game boosts');
706
+ const boosts = program.command("boosts").description("Buy, activate, and inspect game boosts");
712
707
  boosts
713
- .command('balance')
714
- .description('Show your available boost inventory')
715
- .option('--json', 'Output JSON')
708
+ .command("balance")
709
+ .description("Show your available boost inventory")
710
+ .option("--json", "Output JSON")
716
711
  .action(async (opts) => {
717
712
  await (0, boosts_1.showBoostBalance)(opts);
718
713
  });
719
714
  boosts
720
- .command('offers')
721
- .description('List available boost packs')
722
- .option('--json', 'Output JSON')
715
+ .command("offers")
716
+ .description("List available boost packs")
717
+ .option("--json", "Output JSON")
723
718
  .action(async (opts) => {
724
719
  await (0, boosts_1.browseBoostOffers)(opts);
725
720
  });
726
721
  boosts
727
- .command('buy <sku>')
728
- .description('Buy one boost pack')
729
- .option('--quantity <number>', 'Number of packs to buy')
730
- .option('--json', 'Output JSON')
722
+ .command("buy <sku>")
723
+ .description("Buy one boost pack")
724
+ .option("--quantity <number>", "Number of packs to buy")
725
+ .option("--json", "Output JSON")
731
726
  .action(async (sku, opts) => {
732
727
  await (0, boosts_1.buyBoostPack)(sku, opts);
733
728
  });
734
729
  boosts
735
- .command('activate <ref>')
736
- .description('Activate one or more boosts for an app')
737
- .option('--units <number>', 'Number of boosts to consume')
738
- .option('--json', 'Output JSON')
730
+ .command("activate <ref>")
731
+ .description("Activate one or more boosts for an app")
732
+ .option("--units <number>", "Number of boosts to consume")
733
+ .option("--json", "Output JSON")
739
734
  .action(async (ref, opts) => {
740
735
  await (0, boosts_1.activateBoost)(ref, opts);
741
736
  });
742
737
  boosts
743
- .command('status <ref>')
744
- .description('Show the current boost status for an app')
745
- .option('--json', 'Output JSON')
738
+ .command("status <ref>")
739
+ .description("Show the current boost status for an app")
740
+ .option("--json", "Output JSON")
746
741
  .action(async (ref, opts) => {
747
742
  await (0, boosts_1.showBoostStatus)(ref, opts);
748
743
  });
749
744
  boosts
750
- .command('history <ref>')
751
- .description('Show past boost runs for an app')
752
- .option('--limit <number>', 'Maximum number of boost runs to include')
753
- .option('--json', 'Output JSON')
745
+ .command("history <ref>")
746
+ .description("Show past boost runs for an app")
747
+ .option("--limit <number>", "Maximum number of boost runs to include")
748
+ .option("--json", "Output JSON")
754
749
  .action(async (ref, opts) => {
755
750
  await (0, boosts_1.showBoostHistory)(ref, opts);
756
751
  });
757
752
  boosts
758
- .command('report <ref>')
759
- .description('Show daily boost performance for an app')
760
- .option('--days <number>', 'Number of days to include')
761
- .option('--json', 'Output JSON')
753
+ .command("report <ref>")
754
+ .description("Show daily boost performance for an app")
755
+ .option("--days <number>", "Number of days to include")
756
+ .option("--json", "Output JSON")
762
757
  .action(async (ref, opts) => {
763
758
  await (0, boosts_1.showBoostReport)(ref, opts);
764
759
  });
765
- const notifications = program.command('notifications').description('Notification inbox');
760
+ const notifications = program.command("notifications").description("Notification inbox");
766
761
  notifications
767
- .command('browse')
768
- .description('Browse notifications')
769
- .option('--status <status>', 'unread, read, or all')
770
- .option('--limit <number>', 'Maximum number of results to return')
771
- .option('--offset <number>', 'Result offset')
772
- .option('--json', 'Output JSON')
762
+ .command("browse")
763
+ .description("Browse notifications")
764
+ .option("--status <status>", "unread, read, or all")
765
+ .option("--limit <number>", "Maximum number of results to return")
766
+ .option("--offset <number>", "Result offset")
767
+ .option("--json", "Output JSON")
773
768
  .action(async (opts) => {
774
769
  await (0, notifications_1.browseNotifications)(opts);
775
770
  });
776
771
  notifications
777
- .command('read <id>')
778
- .description('Mark one notification as read')
779
- .option('--json', 'Output JSON')
772
+ .command("read <id>")
773
+ .description("Mark one notification as read")
774
+ .option("--json", "Output JSON")
780
775
  .action(async (id, opts) => {
781
776
  await (0, notifications_1.readNotification)(id, opts);
782
777
  });
783
778
  notifications
784
- .command('read-all')
785
- .description('Mark all notifications as read')
786
- .option('--json', 'Output JSON')
779
+ .command("read-all")
780
+ .description("Mark all notifications as read")
781
+ .option("--json", "Output JSON")
787
782
  .action(async (opts) => {
788
783
  await (0, notifications_1.readAllNotifications)(opts);
789
784
  });
790
- const creations = program.command('creations').description('Manage your creations');
785
+ const creations = program.command("creations").description("Manage your creations");
791
786
  creations
792
- .command('browse')
793
- .description('Browse your apps, assets, and asset packs')
794
- .option('--kind <kind>', 'app, asset, asset-pack, or all')
795
- .option('--creator <creator>', 'me or a creator slug')
796
- .option('--limit <number>', 'Maximum number of results to return')
797
- .option('--offset <number>', 'Result offset')
798
- .option('--json', 'Output JSON')
787
+ .command("browse")
788
+ .description("Browse your apps, assets, and asset packs")
789
+ .option("--kind <kind>", "app, asset, asset-pack, or all")
790
+ .option("--creator <creator>", "me or a creator slug")
791
+ .option("--limit <number>", "Maximum number of results to return")
792
+ .option("--offset <number>", "Result offset")
793
+ .option("--json", "Output JSON")
799
794
  .action(async (opts) => {
800
795
  await (0, creations_1.browseCreations)(opts);
801
796
  });
802
- const creationApps = creations.command('apps').description('Manage app creations');
797
+ const creationApps = creations.command("apps").description("Manage app creations");
803
798
  creationApps
804
- .command('update <name>')
805
- .description('Update app metadata')
806
- .option('--creator <creator>', 'me or a creator slug')
807
- .option('--display-name <text>', 'Display name')
808
- .option('--type <type>', 'game, demo, tool, or template')
809
- .option('--json', 'Output JSON')
799
+ .command("update <name>")
800
+ .description("Update app metadata")
801
+ .option("--creator <creator>", "me or a creator slug")
802
+ .option("--display-name <text>", "Display name")
803
+ .option("--type <type>", "game, demo, tool, or template")
804
+ .option("--json", "Output JSON")
810
805
  .action(async (name, opts) => {
811
806
  await (0, creations_1.updateCreationApp)(name, opts);
812
807
  });
813
808
  creationApps
814
- .command('delete <name>')
815
- .description('Delete an app')
816
- .option('--creator <creator>', 'me or a creator slug')
817
- .option('--json', 'Output JSON')
809
+ .command("delete <name>")
810
+ .description("Delete an app")
811
+ .option("--creator <creator>", "me or a creator slug")
812
+ .option("--json", "Output JSON")
818
813
  .action(async (name, opts) => {
819
814
  await (0, creations_1.deleteCreationApp)(name, opts);
820
815
  });
821
- const creationAppVersions = creationApps.command('versions').description('Manage app versions');
816
+ const creationAppVersions = creationApps.command("versions").description("Manage app versions");
822
817
  creationAppVersions
823
- .command('set-current <name> <version>')
824
- .description('Set the current app version')
825
- .option('--creator <creator>', 'me or a creator slug')
826
- .option('--json', 'Output JSON')
818
+ .command("set-current <name> <version>")
819
+ .description("Set the current app version")
820
+ .option("--creator <creator>", "me or a creator slug")
821
+ .option("--json", "Output JSON")
827
822
  .action(async (name, version, opts) => {
828
823
  await (0, creations_1.setCurrentCreationAppVersion)(name, version, opts);
829
824
  });
830
825
  creationAppVersions
831
- .command('publish <name> <version>')
832
- .description('Publish an app version')
833
- .option('--creator <creator>', 'me or a creator slug')
834
- .option('--json', 'Output JSON')
826
+ .command("publish <name> <version>")
827
+ .description("Publish an app version")
828
+ .option("--creator <creator>", "me or a creator slug")
829
+ .option("--json", "Output JSON")
835
830
  .action(async (name, version, opts) => {
836
831
  await (0, creations_1.publishCreationAppVersion)(name, version, opts);
837
832
  });
838
833
  creationAppVersions
839
- .command('unpublish <name> <version>')
840
- .description('Unpublish an app version')
841
- .option('--creator <creator>', 'me or a creator slug')
842
- .option('--json', 'Output JSON')
834
+ .command("unpublish <name> <version>")
835
+ .description("Unpublish an app version")
836
+ .option("--creator <creator>", "me or a creator slug")
837
+ .option("--json", "Output JSON")
843
838
  .action(async (name, version, opts) => {
844
839
  await (0, creations_1.unpublishCreationAppVersion)(name, version, opts);
845
840
  });
846
841
  creationAppVersions
847
- .command('delete <name> <version>')
848
- .description('Delete an app version')
849
- .option('--creator <creator>', 'me or a creator slug')
850
- .option('--json', 'Output JSON')
842
+ .command("delete <name> <version>")
843
+ .description("Delete an app version")
844
+ .option("--creator <creator>", "me or a creator slug")
845
+ .option("--json", "Output JSON")
851
846
  .action(async (name, version, opts) => {
852
847
  await (0, creations_1.deleteCreationAppVersion)(name, version, opts);
853
848
  });
854
- const creationAssets = creations.command('assets').description('Manage asset creations');
849
+ const creationAssets = creations.command("assets").description("Manage asset creations");
855
850
  creationAssets
856
- .command('update <name>')
857
- .description('Update asset metadata')
858
- .option('--creator <creator>', 'me or a creator slug')
859
- .option('--name <slug>', 'New asset slug')
860
- .option('--display-name <text>', 'Display name')
861
- .option('--description <text>', 'Description')
862
- .option('--clear-description', 'Clear description')
863
- .option('--json', 'Output JSON')
851
+ .command("update <name>")
852
+ .description("Update asset metadata")
853
+ .option("--creator <creator>", "me or a creator slug")
854
+ .option("--name <slug>", "New asset slug")
855
+ .option("--display-name <text>", "Display name")
856
+ .option("--description <text>", "Description")
857
+ .option("--clear-description", "Clear description")
858
+ .option("--json", "Output JSON")
864
859
  .action(async (name, opts) => {
865
860
  await (0, creations_1.updateCreationAsset)(name, opts);
866
861
  });
867
862
  creationAssets
868
- .command('delete <name>')
869
- .description('Delete an asset')
870
- .option('--creator <creator>', 'me or a creator slug')
871
- .option('--json', 'Output JSON')
863
+ .command("delete <name>")
864
+ .description("Delete an asset")
865
+ .option("--creator <creator>", "me or a creator slug")
866
+ .option("--json", "Output JSON")
872
867
  .action(async (name, opts) => {
873
868
  await (0, creations_1.deleteCreationAsset)(name, opts);
874
869
  });
875
- const creationAssetVersions = creationAssets.command('versions').description('Manage asset revisions');
870
+ const creationAssetVersions = creationAssets.command("versions").description("Manage asset revisions");
876
871
  creationAssetVersions
877
- .command('set-current <name> <revision>')
878
- .description('Set the current asset revision')
879
- .option('--creator <creator>', 'me or a creator slug')
880
- .option('--json', 'Output JSON')
872
+ .command("set-current <name> <revision>")
873
+ .description("Set the current asset revision")
874
+ .option("--creator <creator>", "me or a creator slug")
875
+ .option("--json", "Output JSON")
881
876
  .action(async (name, revision, opts) => {
882
877
  await (0, creations_1.setCurrentCreationAssetVersion)(name, revision, opts);
883
878
  });
884
879
  creationAssetVersions
885
- .command('publish <name> <revision>')
886
- .description('Publish an asset revision')
887
- .option('--creator <creator>', 'me or a creator slug')
888
- .option('--json', 'Output JSON')
880
+ .command("publish <name> <revision>")
881
+ .description("Publish an asset revision")
882
+ .option("--creator <creator>", "me or a creator slug")
883
+ .option("--json", "Output JSON")
889
884
  .action(async (name, revision, opts) => {
890
885
  await (0, creations_1.publishCreationAssetVersion)(name, revision, opts);
891
886
  });
892
887
  creationAssetVersions
893
- .command('unpublish <name> <revision>')
894
- .description('Unpublish an asset revision')
895
- .option('--creator <creator>', 'me or a creator slug')
896
- .option('--json', 'Output JSON')
888
+ .command("unpublish <name> <revision>")
889
+ .description("Unpublish an asset revision")
890
+ .option("--creator <creator>", "me or a creator slug")
891
+ .option("--json", "Output JSON")
897
892
  .action(async (name, revision, opts) => {
898
893
  await (0, creations_1.unpublishCreationAssetVersion)(name, revision, opts);
899
894
  });
900
895
  creationAssetVersions
901
- .command('delete <name> <revision>')
902
- .description('Delete an asset revision')
903
- .option('--creator <creator>', 'me or a creator slug')
904
- .option('--json', 'Output JSON')
896
+ .command("delete <name> <revision>")
897
+ .description("Delete an asset revision")
898
+ .option("--creator <creator>", "me or a creator slug")
899
+ .option("--json", "Output JSON")
905
900
  .action(async (name, revision, opts) => {
906
901
  await (0, creations_1.deleteCreationAssetVersion)(name, revision, opts);
907
902
  });
908
- const creationAssetPacks = creations.command('asset-packs').description('Manage asset pack creations');
903
+ const creationAssetPacks = creations.command("asset-packs").description("Manage asset pack creations");
909
904
  creationAssetPacks
910
- .command('update <name>')
911
- .description('Update asset pack metadata')
912
- .option('--creator <creator>', 'me or a creator slug')
913
- .option('--name <slug>', 'New asset pack slug')
914
- .option('--display-name <text>', 'Display name')
915
- .option('--description <text>', 'Description')
916
- .option('--clear-description', 'Clear description')
917
- .option('--preview-app-version-id <id>', 'Preview app version id')
918
- .option('--clear-preview-app-version-id', 'Clear preview app version id')
919
- .option('--json', 'Output JSON')
905
+ .command("update <name>")
906
+ .description("Update asset pack metadata")
907
+ .option("--creator <creator>", "me or a creator slug")
908
+ .option("--name <slug>", "New asset pack slug")
909
+ .option("--display-name <text>", "Display name")
910
+ .option("--description <text>", "Description")
911
+ .option("--clear-description", "Clear description")
912
+ .option("--preview-app-version-id <id>", "Preview app version id")
913
+ .option("--clear-preview-app-version-id", "Clear preview app version id")
914
+ .option("--json", "Output JSON")
920
915
  .action(async (name, opts) => {
921
916
  await (0, creations_1.updateCreationAssetPack)(name, opts);
922
917
  });
923
918
  creationAssetPacks
924
- .command('delete <name>')
925
- .description('Delete an asset pack')
926
- .option('--creator <creator>', 'me or a creator slug')
927
- .option('--json', 'Output JSON')
919
+ .command("delete <name>")
920
+ .description("Delete an asset pack")
921
+ .option("--creator <creator>", "me or a creator slug")
922
+ .option("--json", "Output JSON")
928
923
  .action(async (name, opts) => {
929
924
  await (0, creations_1.deleteCreationAssetPack)(name, opts);
930
925
  });
931
- const creationAssetPackVersions = creationAssetPacks.command('versions').description('Manage asset pack versions');
926
+ const creationAssetPackVersions = creationAssetPacks.command("versions").description("Manage asset pack versions");
932
927
  creationAssetPackVersions
933
- .command('set-current <name> <version>')
934
- .description('Set the current asset pack version')
935
- .option('--creator <creator>', 'me or a creator slug')
936
- .option('--json', 'Output JSON')
928
+ .command("set-current <name> <version>")
929
+ .description("Set the current asset pack version")
930
+ .option("--creator <creator>", "me or a creator slug")
931
+ .option("--json", "Output JSON")
937
932
  .action(async (name, version, opts) => {
938
933
  await (0, creations_1.setCurrentCreationAssetPackVersion)(name, version, opts);
939
934
  });
940
935
  creationAssetPackVersions
941
- .command('publish <name> <version>')
942
- .description('Publish an asset pack version')
943
- .option('--creator <creator>', 'me or a creator slug')
944
- .option('--json', 'Output JSON')
936
+ .command("publish <name> <version>")
937
+ .description("Publish an asset pack version")
938
+ .option("--creator <creator>", "me or a creator slug")
939
+ .option("--json", "Output JSON")
945
940
  .action(async (name, version, opts) => {
946
941
  await (0, creations_1.publishCreationAssetPackVersion)(name, version, opts);
947
942
  });
948
943
  creationAssetPackVersions
949
- .command('unpublish <name> <version>')
950
- .description('Unpublish an asset pack version')
951
- .option('--creator <creator>', 'me or a creator slug')
952
- .option('--json', 'Output JSON')
944
+ .command("unpublish <name> <version>")
945
+ .description("Unpublish an asset pack version")
946
+ .option("--creator <creator>", "me or a creator slug")
947
+ .option("--json", "Output JSON")
953
948
  .action(async (name, version, opts) => {
954
949
  await (0, creations_1.unpublishCreationAssetPackVersion)(name, version, opts);
955
950
  });
956
951
  creationAssetPackVersions
957
- .command('delete <name> <version>')
958
- .description('Delete an asset pack version')
959
- .option('--creator <creator>', 'me or a creator slug')
960
- .option('--json', 'Output JSON')
952
+ .command("delete <name> <version>")
953
+ .description("Delete an asset pack version")
954
+ .option("--creator <creator>", "me or a creator slug")
955
+ .option("--json", "Output JSON")
961
956
  .action(async (name, version, opts) => {
962
957
  await (0, creations_1.deleteCreationAssetPackVersion)(name, version, opts);
963
958
  });
964
- const ai = program.command('ai').description('AI asset creation');
965
- ai
966
- .command('create <type> <prompt>')
967
- .description('Create a new AI-generated asset')
968
- .option('--asset-name <slug>', 'Generated asset slug')
969
- .option('--asset-display-name <text>', 'Generated asset display name')
970
- .option('--asset-description <text>', 'Generated asset description')
971
- .option('--subcategory <slug>', 'Generated asset subcategory')
972
- .option('--visibility <visibility>', 'private or public')
973
- .option('--attach-app-version-id <id>', 'Attach generated asset to an app version')
974
- .option('--image1 <pathOrUrl>', 'Reference image one')
975
- .option('--image2 <pathOrUrl>', 'Reference image two')
976
- .option('--duration <value>', 'Duration value')
977
- .option('--instrumental', 'Force instrumental music generation')
978
- .option('--loop', 'Create a looping SFX')
979
- .option('--cover-prompt <text>', 'Cover prompt for music generation')
980
- .option('--voice <alias>', 'Speech voice alias')
981
- .option('--provider-voice-id <id>', 'Custom ElevenLabs speech voice id')
982
- .option('--ratio <ratio>', 'Aspect ratio')
983
- .option('--size <size>', 'Image size (image only)')
984
- .option('--resolution <resolution>', 'Resolution')
985
- .option('--source-mode <mode>', '3D source mode')
986
- .option('--topology <mode>', '3D topology mode')
987
- .option('--polycount <count>', '3D target polycount')
988
- .option('--remesh', 'Enable remeshing')
989
- .option('--texture', 'Enable texturing')
990
- .option('--timeout <seconds>', 'Wait timeout in seconds')
991
- .option('--poll <milliseconds>', 'Polling interval in milliseconds')
992
- .option('--output <path>', 'Write generated image bytes to a local file (image only)')
993
- .option('--json', 'Output JSON')
959
+ const ai = program.command("ai").description("AI asset creation");
960
+ ai.command("create <type> <prompt>")
961
+ .description("Create a new AI-generated asset")
962
+ .option("--asset-name <slug>", "Generated asset slug")
963
+ .option("--asset-display-name <text>", "Generated asset display name")
964
+ .option("--asset-description <text>", "Generated asset description")
965
+ .option("--subcategory <slug>", "Generated asset subcategory")
966
+ .option("--visibility <visibility>", "private or public")
967
+ .option("--attach-app-version-id <id>", "Attach generated asset to an app version")
968
+ .option("--image1 <pathOrUrl>", "Reference image one")
969
+ .option("--image2 <pathOrUrl>", "Reference image two")
970
+ .option("--duration <value>", "Duration value")
971
+ .option("--instrumental", "Force instrumental music generation")
972
+ .option("--loop", "Create a looping SFX")
973
+ .option("--cover-prompt <text>", "Cover prompt for music generation")
974
+ .option("--voice <alias>", "Speech voice alias")
975
+ .option("--provider-voice-id <id>", "Custom ElevenLabs speech voice id")
976
+ .option("--ratio <ratio>", "Aspect ratio")
977
+ .option("--size <size>", "Image size (image only)")
978
+ .option("--resolution <resolution>", "Resolution")
979
+ .option("--source-mode <mode>", "3D source mode")
980
+ .option("--topology <mode>", "3D topology mode")
981
+ .option("--polycount <count>", "3D target polycount")
982
+ .option("--remesh", "Enable remeshing")
983
+ .option("--texture", "Enable texturing")
984
+ .option("--timeout <seconds>", "Wait timeout in seconds")
985
+ .option("--poll <milliseconds>", "Polling interval in milliseconds")
986
+ .option("--output <path>", "Write generated image bytes to a local file (image only)")
987
+ .option("--json", "Output JSON")
994
988
  .action(async (type, prompt, opts) => {
995
989
  await (0, generation_1.generate)(type, prompt, {
996
990
  subcategory: opts.subcategory,
@@ -1021,84 +1015,83 @@ ai
1021
1015
  json: opts.json,
1022
1016
  });
1023
1017
  });
1024
- const aiJobs = ai.command('jobs').description('Browse AI generation jobs');
1018
+ const aiJobs = ai.command("jobs").description("Browse AI generation jobs");
1025
1019
  aiJobs
1026
- .command('browse')
1027
- .description('Browse AI jobs')
1028
- .option('--type <type>', 'image, music, sfx, speech, video, model_3d, or all')
1029
- .option('--limit <number>', 'Maximum number of results to return')
1030
- .option('--offset <number>', 'Result offset')
1031
- .option('--json', 'Output JSON')
1020
+ .command("browse")
1021
+ .description("Browse AI jobs")
1022
+ .option("--type <type>", "image, music, sfx, speech, video, model_3d, or all")
1023
+ .option("--limit <number>", "Maximum number of results to return")
1024
+ .option("--offset <number>", "Result offset")
1025
+ .option("--json", "Output JSON")
1032
1026
  .action(async (opts) => {
1033
1027
  await (0, generation_1.browseGenerationJobs)(opts);
1034
1028
  });
1035
- ai
1036
- .command('generations')
1037
- .description('Browse AI generation history')
1038
- .option('--type <type>', 'text, json, image, music, sfx, speech, video, model_3d, or all')
1039
- .option('--limit <number>', 'Maximum number of results to return')
1040
- .option('--offset <number>', 'Result offset')
1041
- .option('--format <format>', 'text or json')
1029
+ ai.command("generations")
1030
+ .description("Browse AI generation history")
1031
+ .option("--type <type>", "text, json, image, music, sfx, speech, video, model_3d, or all")
1032
+ .option("--limit <number>", "Maximum number of results to return")
1033
+ .option("--offset <number>", "Result offset")
1034
+ .option("--format <format>", "text or json")
1042
1035
  .action(async (opts) => {
1043
1036
  await (0, generation_1.generations)(opts);
1044
1037
  });
1045
1038
  aiJobs
1046
- .command('detail <id>')
1047
- .description('Show one AI job')
1048
- .option('--json', 'Output JSON')
1039
+ .command("detail <id>")
1040
+ .description("Show one AI job")
1041
+ .option("--json", "Output JSON")
1049
1042
  .action(async (id, opts) => {
1050
1043
  await (0, generation_1.showGenerationJob)(id, opts);
1051
1044
  });
1052
- const project = program.command('project').description('Local workspace tooling');
1053
- const internalDevRouter = project.command('_dev-router').description('Internal shared dev router');
1045
+ const project = program.command("project").description("Local workspace tooling");
1046
+ const internalDevRouter = project.command("_dev-router").description("Internal shared dev router");
1054
1047
  internalDevRouter
1055
- .command('serve')
1056
- .description('Run the internal shared dev router')
1048
+ .command("serve")
1049
+ .description("Run the internal shared dev router")
1057
1050
  .action(async () => {
1058
1051
  await (0, devServer_1.runDevRouterServer)();
1059
1052
  });
1060
1053
  project
1061
- .command('init [path]')
1062
- .description('Initialize a Playdrop workspace')
1054
+ .command("init [path]")
1055
+ .description("Initialize a Playdrop workspace")
1063
1056
  .action(async (pathArg) => {
1064
1057
  console.error('"playdrop project init" is now "playdrop workspaces init"; running the workspace command for compatibility.');
1065
1058
  await (0, workspaces_1.initWorkspace)(pathArg);
1066
1059
  });
1067
- const projectCreate = project.command('create').description('Create project resources');
1060
+ const projectCreate = project.command("create").description("Create project resources");
1068
1061
  projectCreate
1069
- .command('app <name>')
1070
- .description('Create a new app from a template or exact remix version')
1071
- .option('--template <ref>', 'Template ref')
1072
- .option('--remix <ref>', 'Canonical app version ref')
1062
+ .command("app <name>")
1063
+ .description("Create a new app from a template or exact remix version")
1064
+ .option("--template <ref>", "Template ref")
1065
+ .option("--remix <ref>", "Canonical app version ref")
1073
1066
  .action(async (name, opts) => {
1074
1067
  await (0, create_1.create)(name, opts);
1075
1068
  });
1076
1069
  projectCreate
1077
- .command('asset-spec <name>')
1078
- .description('Create a new custom asset spec scaffold')
1070
+ .command("asset-spec <name>")
1071
+ .description("Create a new custom asset spec scaffold")
1079
1072
  .action(async (name) => {
1080
1073
  await (0, create_1.createAssetSpecProject)(name);
1081
1074
  });
1082
1075
  projectCreate
1083
- .command('asset <name>')
1084
- .description('Create a new asset remix from an exact asset version')
1085
- .requiredOption('--remix <ref>', 'Canonical asset version ref')
1076
+ .command("asset <name>")
1077
+ .description("Create a new asset remix from an exact asset version")
1078
+ .requiredOption("--remix <ref>", "Canonical asset version ref")
1086
1079
  .action(async (name, opts) => {
1087
- await (0, createRemixContent_1.createRemixContent)('asset', name, opts.remix);
1080
+ await (0, createRemixContent_1.createRemixContent)("asset", name, opts.remix);
1088
1081
  });
1089
1082
  projectCreate
1090
- .command('pack <name>')
1091
- .description('Create a new asset pack remix from an exact pack version')
1092
- .requiredOption('--remix <ref>', 'Canonical pack version ref')
1083
+ .command("pack <name>")
1084
+ .description("Create a new asset pack remix from an exact pack version")
1085
+ .requiredOption("--remix <ref>", "Canonical pack version ref")
1093
1086
  .action(async (name, opts) => {
1094
- await (0, createRemixContent_1.createRemixContent)('pack', name, opts.remix);
1087
+ await (0, createRemixContent_1.createRemixContent)("pack", name, opts.remix);
1095
1088
  });
1096
1089
  project
1097
- .command('dev [target]')
1098
- .description('Run an app locally')
1099
- .option('--app <name>', 'App name when the target is a workspace')
1100
- .option('--dev-auth <mode>', 'prompt, anonymous, viewer, or player')
1101
- .option('--player <slot>', '1, 2, 3, or 4 when --dev-auth player is selected')
1090
+ .command("dev [target]")
1091
+ .description("Run an app locally")
1092
+ .option("--app <name>", "App name when the target is a workspace")
1093
+ .option("--dev-auth <mode>", "prompt, anonymous, viewer, or player")
1094
+ .option("--player <slot>", "1, 2, 3, or 4 when --dev-auth player is selected")
1102
1095
  .action(async (target, opts = {}) => {
1103
1096
  await (0, dev_1.dev)(target, opts.app, {
1104
1097
  devAuth: opts.devAuth,
@@ -1106,11 +1099,11 @@ project
1106
1099
  });
1107
1100
  });
1108
1101
  project
1109
- .command('dev-browser [target]')
1110
- .description('Open the hosted /dev route in an isolated Chromium window')
1111
- .option('--app <name>', 'App name when the target is a workspace')
1112
- .option('--dev-auth <mode>', 'prompt, anonymous, viewer, or player')
1113
- .option('--player <slot>', '1, 2, 3, or 4 when --dev-auth player is selected')
1102
+ .command("dev-browser [target]")
1103
+ .description("Open the hosted /dev route in an isolated Chromium window")
1104
+ .option("--app <name>", "App name when the target is a workspace")
1105
+ .option("--dev-auth <mode>", "prompt, anonymous, viewer, or player")
1106
+ .option("--player <slot>", "1, 2, 3, or 4 when --dev-auth player is selected")
1114
1107
  .action(async (target, opts = {}) => {
1115
1108
  await (0, devBrowser_1.devBrowser)(target, {
1116
1109
  app: opts.app,
@@ -1119,12 +1112,12 @@ project
1119
1112
  });
1120
1113
  });
1121
1114
  project
1122
- .command('check [target]')
1123
- .description('Run the deterministic hosted game load-check in installed Chrome')
1124
- .option('--app <name>', 'App name when the target is a workspace')
1125
- .option('--timeout <seconds>', 'Load-check timeout in seconds')
1126
- .option('--screenshot <path>', 'Screenshot output path')
1127
- .option('--tape <surface>', 'Run matched idle and catalogue playtest-tape captures on a declared surface')
1115
+ .command("check [target]")
1116
+ .description("Run the deterministic hosted game load-check in installed Chrome")
1117
+ .option("--app <name>", "App name when the target is a workspace")
1118
+ .option("--timeout <seconds>", "Load-check timeout in seconds")
1119
+ .option("--screenshot <path>", "Screenshot output path")
1120
+ .option("--tape <surface>", "Run matched idle and catalogue playtest-tape captures on a declared surface")
1128
1121
  .action(async (target, opts = {}) => {
1129
1122
  await (0, check_1.check)(target, {
1130
1123
  app: opts.app,
@@ -1133,18 +1126,18 @@ project
1133
1126
  tape: opts.tape,
1134
1127
  });
1135
1128
  });
1136
- const projectCapture = project.command('capture').description('Record game media with the native macOS recorder');
1129
+ const projectCapture = project.command("capture").description("Record game media with the native macOS recorder");
1137
1130
  projectCapture
1138
- .argument('[target]')
1139
- .option('--app <name>', 'App name when the target is a workspace')
1140
- .option('--duration <seconds>', 'Recording duration in seconds')
1141
- .option('--width <pixels>', 'Final gameplay width in pixels')
1142
- .option('--height <pixels>', 'Final gameplay height in pixels')
1143
- .option('--fps <number>', 'Final output frame rate')
1144
- .option('--poster-at <seconds>', 'Poster frame offset in seconds')
1145
- .option('--audio', 'Capture gameplay audio')
1146
- .option('--output-dir <path>', 'Output directory for capture artifacts, relative to the selected project')
1147
- .option('--keep-raw', 'Keep the raw intermediate recording')
1131
+ .argument("[target]")
1132
+ .option("--app <name>", "App name when the target is a workspace")
1133
+ .option("--duration <seconds>", "Recording duration in seconds")
1134
+ .option("--width <pixels>", "Final gameplay width in pixels")
1135
+ .option("--height <pixels>", "Final gameplay height in pixels")
1136
+ .option("--fps <number>", "Final output frame rate")
1137
+ .option("--poster-at <seconds>", "Poster frame offset in seconds")
1138
+ .option("--audio", "Capture gameplay audio")
1139
+ .option("--output-dir <path>", "Output directory for capture artifacts, relative to the selected project")
1140
+ .option("--keep-raw", "Keep the raw intermediate recording")
1148
1141
  .action(async (target, opts) => {
1149
1142
  await (0, captureListing_1.captureListing)(target, {
1150
1143
  app: opts.app,
@@ -1158,18 +1151,18 @@ projectCapture
1158
1151
  keepRaw: opts.keepRaw,
1159
1152
  });
1160
1153
  });
1161
- const projectMarketing = project.command('marketing').description('Prepare local marketing captures and assets');
1154
+ const projectMarketing = project.command("marketing").description("Prepare local marketing captures and assets");
1162
1155
  projectMarketing
1163
- .command('doctor [target]')
1164
- .description('Check local marketing capture prerequisites')
1165
- .option('--app <name>', 'App name when the target is a workspace')
1166
- .option('--surfaces <list>', 'desktop, mobile-landscape, mobile-portrait')
1167
- .option('--duration <seconds>', 'Capture duration in seconds')
1168
- .option('--fps <number>', 'Capture frame rate')
1169
- .option('--audio-policy <policy>', 'music-and-sfx, sfx-only, or silent')
1170
- .option('--seed <seed>', 'Preview seed')
1171
- .option('--output-dir <path>', 'Output directory, defaults to assets/marketing')
1172
- .option('--screen-device <device>', 'macOS avfoundation screen device index')
1156
+ .command("doctor [target]")
1157
+ .description("Check local marketing capture prerequisites")
1158
+ .option("--app <name>", "App name when the target is a workspace")
1159
+ .option("--surfaces <list>", "desktop, mobile-landscape, mobile-portrait")
1160
+ .option("--duration <seconds>", "Capture duration in seconds")
1161
+ .option("--fps <number>", "Capture frame rate")
1162
+ .option("--audio-policy <policy>", "music-and-sfx, sfx-only, or silent")
1163
+ .option("--seed <seed>", "Preview seed")
1164
+ .option("--output-dir <path>", "Output directory, defaults to assets/marketing")
1165
+ .option("--screen-device <device>", "macOS avfoundation screen device index")
1173
1166
  .action(async (target, opts) => {
1174
1167
  await (0, marketing_1.marketingDoctor)(target, {
1175
1168
  app: opts.app,
@@ -1183,17 +1176,17 @@ projectMarketing
1183
1176
  });
1184
1177
  });
1185
1178
  projectMarketing
1186
- .command('capture [target]')
1187
- .description('Capture local marketing videos from the app preview')
1188
- .option('--app <name>', 'App name when the target is a workspace')
1189
- .option('--surfaces <list>', 'desktop, mobile-landscape, mobile-portrait')
1190
- .option('--duration <seconds>', 'Capture duration in seconds')
1191
- .option('--fps <number>', 'Capture frame rate')
1192
- .option('--audio-policy <policy>', 'music-and-sfx, sfx-only, or silent')
1193
- .option('--seed <seed>', 'Preview seed')
1194
- .option('--output-dir <path>', 'Output directory, defaults to assets/marketing')
1195
- .option('--screen-device <device>', 'macOS avfoundation screen device index')
1196
- .option('--keep-raw', 'Reserved for future raw capture preservation')
1179
+ .command("capture [target]")
1180
+ .description("Capture local marketing videos from the app preview")
1181
+ .option("--app <name>", "App name when the target is a workspace")
1182
+ .option("--surfaces <list>", "desktop, mobile-landscape, mobile-portrait")
1183
+ .option("--duration <seconds>", "Capture duration in seconds")
1184
+ .option("--fps <number>", "Capture frame rate")
1185
+ .option("--audio-policy <policy>", "music-and-sfx, sfx-only, or silent")
1186
+ .option("--seed <seed>", "Preview seed")
1187
+ .option("--output-dir <path>", "Output directory, defaults to assets/marketing")
1188
+ .option("--screen-device <device>", "macOS avfoundation screen device index")
1189
+ .option("--keep-raw", "Reserved for future raw capture preservation")
1197
1190
  .action(async (target, opts) => {
1198
1191
  await (0, marketing_1.marketingCapture)(target, {
1199
1192
  app: opts.app,
@@ -1208,117 +1201,117 @@ projectMarketing
1208
1201
  });
1209
1202
  });
1210
1203
  project
1211
- .command('validate [target]')
1212
- .description('Validate catalogue content')
1213
- .option('--env <env>', 'Resolve this command against one logged-in environment')
1204
+ .command("validate [target]")
1205
+ .description("Validate catalogue content")
1206
+ .option("--env <env>", "Resolve this command against one logged-in environment")
1214
1207
  .action(async (target, opts) => {
1215
- await (0, validate_1.validate)(target ?? '.', { env: opts.env });
1208
+ await (0, validate_1.validate)(target ?? ".", { env: opts.env });
1216
1209
  });
1217
1210
  project
1218
- .command('build [target]')
1219
- .description('Build local content')
1211
+ .command("build [target]")
1212
+ .description("Build local content")
1220
1213
  .action(async (target) => {
1221
- await (0, build_1.build)(target ?? '.');
1214
+ await (0, build_1.build)(target ?? ".");
1222
1215
  });
1223
1216
  project
1224
- .command('format [target]')
1225
- .description('Run local formatting')
1217
+ .command("format [target]")
1218
+ .description("Run local formatting")
1226
1219
  .action(async (target) => {
1227
- await (0, format_1.format)(target ?? '.');
1220
+ await (0, format_1.format)(target ?? ".");
1228
1221
  });
1229
1222
  project
1230
- .command('publish [target]')
1231
- .description('Publish local content to Playdrop')
1232
- .option('--env <env>', 'Resolve this command against one logged-in environment')
1233
- .option('--clear-tags', 'Confirm clearing existing live tags when this publish removes them')
1234
- .option('--json', 'Output JSON for direct index.html publishing')
1235
- .addOption(new commander_1.Option('--skip-review', 'Mark uploaded app versions as NOT_REQUIRED review. Admin-only.').hideHelp())
1223
+ .command("publish [target]")
1224
+ .description("Publish local content to Playdrop")
1225
+ .option("--env <env>", "Resolve this command against one logged-in environment")
1226
+ .option("--clear-tags", "Confirm clearing existing live tags when this publish removes them")
1227
+ .option("--json", "Output JSON for direct index.html publishing")
1228
+ .addOption(new commander_1.Option("--skip-review", "Mark uploaded app versions as NOT_REQUIRED review. Admin-only.").hideHelp())
1236
1229
  .action(async (target, opts) => {
1237
- await (0, upload_1.upload)(target ?? '.', {
1230
+ await (0, upload_1.upload)(target ?? ".", {
1238
1231
  env: opts.env,
1239
1232
  skipReview: opts.skipReview,
1240
1233
  clearTags: opts.clearTags,
1241
1234
  json: opts.json,
1242
1235
  });
1243
1236
  });
1244
- const documentation = program.command('documentation').description('Public Playdrop documentation');
1237
+ const documentation = program.command("documentation").description("Public Playdrop documentation");
1245
1238
  documentation
1246
- .command('browse')
1247
- .description('Browse documentation entries')
1248
- .option('--json', 'Output JSON')
1239
+ .command("browse")
1240
+ .description("Browse documentation entries")
1241
+ .option("--json", "Output JSON")
1249
1242
  .action(async (opts) => {
1250
1243
  await (0, documentation_1.browseDocumentation)(opts);
1251
1244
  });
1252
1245
  documentation
1253
- .command('read <path>')
1254
- .description('Read one documentation entry')
1246
+ .command("read <path>")
1247
+ .description("Read one documentation entry")
1255
1248
  .action(async (pathArg) => {
1256
1249
  await (0, documentation_1.readDocumentation)(pathArg);
1257
1250
  });
1258
- const feedback = program.command('feedback').description('Send or review feedback');
1251
+ const feedback = program.command("feedback").description("Send or review feedback");
1259
1252
  feedback
1260
- .command('send')
1261
- .description('Send feedback to the Playdrop team')
1262
- .requiredOption('--title <title>', 'Feedback title')
1263
- .option('--comment <text>', 'Feedback text')
1264
- .option('--category <category>', 'Feedback category')
1265
- .option('--file <path>', 'Load feedback text from a file')
1266
- .option('--json', 'Output JSON')
1253
+ .command("send")
1254
+ .description("Send feedback to the Playdrop team")
1255
+ .requiredOption("--title <title>", "Feedback title")
1256
+ .option("--comment <text>", "Feedback text")
1257
+ .option("--category <category>", "Feedback category")
1258
+ .option("--file <path>", "Load feedback text from a file")
1259
+ .option("--json", "Output JSON")
1267
1260
  .action(async (opts) => {
1268
1261
  await (0, feedback_1.sendFeedback)(opts);
1269
1262
  });
1270
1263
  feedback
1271
- .command('browse')
1272
- .description('Browse feedback entries')
1273
- .option('--admin', 'Browse the full admin feedback inbox')
1274
- .option('--limit <number>', 'Maximum number of results to return')
1275
- .option('--offset <number>', 'Result offset')
1276
- .option('--client <client>', 'Client filter')
1277
- .option('--since-hours <hours>', 'Only include feedback created within this window')
1278
- .option('--user-id <id>', 'User id filter')
1279
- .option('--json', 'Output JSON')
1264
+ .command("browse")
1265
+ .description("Browse feedback entries")
1266
+ .option("--admin", "Browse the full admin feedback inbox")
1267
+ .option("--limit <number>", "Maximum number of results to return")
1268
+ .option("--offset <number>", "Result offset")
1269
+ .option("--client <client>", "Client filter")
1270
+ .option("--since-hours <hours>", "Only include feedback created within this window")
1271
+ .option("--user-id <id>", "User id filter")
1272
+ .option("--json", "Output JSON")
1280
1273
  .action(async (opts) => {
1281
1274
  await (0, feedback_1.browseFeedback)(opts);
1282
1275
  });
1283
1276
  feedback
1284
- .command('delete <id>', { hidden: true })
1285
- .description('Delete one feedback entry')
1286
- .option('--json', 'Output JSON')
1277
+ .command("delete <id>", { hidden: true })
1278
+ .description("Delete one feedback entry")
1279
+ .option("--json", "Output JSON")
1287
1280
  .action(async (id, opts) => {
1288
1281
  await (0, feedback_1.deleteFeedbackEntry)(id, opts);
1289
1282
  });
1290
1283
  program
1291
- .command('getting-started')
1292
- .description('Show the recommended first steps')
1284
+ .command("getting-started")
1285
+ .description("Show the recommended first steps")
1293
1286
  .action(async () => {
1294
- await (0, publicPages_1.showPublicPage)('getting-started', 'app-pages/getting-started.md');
1287
+ await (0, publicPages_1.showPublicPage)("getting-started", "app-pages/getting-started.md");
1295
1288
  });
1296
1289
  program
1297
- .command('faq')
1298
- .description('Show creator-focused platform questions and answers')
1290
+ .command("faq")
1291
+ .description("Show creator-focused platform questions and answers")
1299
1292
  .action(async () => {
1300
- await (0, publicPages_1.showPublicPage)('faq', 'app-pages/faq.md');
1293
+ await (0, publicPages_1.showPublicPage)("faq", "app-pages/faq.md");
1301
1294
  });
1302
1295
  program
1303
- .command('changelog')
1304
- .description('Read the latest public Playdrop changelog')
1296
+ .command("changelog")
1297
+ .description("Read the latest public Playdrop changelog")
1305
1298
  .action(async () => {
1306
1299
  await (0, changelog_1.showChangelog)();
1307
1300
  });
1308
1301
  program
1309
- .command('start')
1310
- .description('Alias of getting-started')
1302
+ .command("start")
1303
+ .description("Alias of getting-started")
1311
1304
  .action(async () => {
1312
- await (0, publicPages_1.showPublicPage)('getting-started', 'app-pages/getting-started.md');
1305
+ await (0, publicPages_1.showPublicPage)("getting-started", "app-pages/getting-started.md");
1313
1306
  });
1314
1307
  program
1315
- .command('update')
1316
- .description('Update the Playdrop CLI')
1317
- .option('--dry-run', 'Print the update command without running it')
1318
- .option('--target-version <version>', 'Explicit PlayDrop CLI version to install')
1319
- .option('--worker', 'Request a managed worker update intent instead of updating this process')
1320
- .option('--worker-key <workerKey>', 'Worker key for --worker')
1321
- .option('--env <env>', 'Resolve this command against one logged-in environment for --worker')
1308
+ .command("update")
1309
+ .description("Update the Playdrop CLI")
1310
+ .option("--dry-run", "Print the update command without running it")
1311
+ .option("--target-version <version>", "Explicit PlayDrop CLI version to install")
1312
+ .option("--worker", "Request a managed worker update intent instead of updating this process")
1313
+ .option("--worker-key <workerKey>", "Worker key for --worker")
1314
+ .option("--env <env>", "Resolve this command against one logged-in environment for --worker")
1322
1315
  .action(async (opts) => {
1323
1316
  await (0, upgrade_1.upgrade)({
1324
1317
  dryRun: Boolean(opts.dryRun),
@@ -1329,8 +1322,8 @@ program
1329
1322
  });
1330
1323
  });
1331
1324
  program
1332
- .command('version')
1333
- .description('Print the Playdrop CLI version')
1325
+ .command("version")
1326
+ .description("Print the Playdrop CLI version")
1334
1327
  .action(() => {
1335
1328
  console.log((0, clientInfo_1.getCliVersionLabel)());
1336
1329
  });