@meshy-ai/cli 0.2.0 → 0.3.1

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 (289) hide show
  1. package/.env.example +8 -2
  2. package/README.md +343 -108
  3. package/dist/client/endpoints/animation-catalog.d.ts +37 -0
  4. package/dist/client/endpoints/animation-catalog.d.ts.map +1 -0
  5. package/dist/client/endpoints/animation-catalog.js +55 -0
  6. package/dist/client/endpoints/animation-catalog.js.map +1 -0
  7. package/dist/client/endpoints/balance.d.ts +5 -0
  8. package/dist/client/endpoints/balance.d.ts.map +1 -1
  9. package/dist/client/endpoints/balance.js +5 -1
  10. package/dist/client/endpoints/balance.js.map +1 -1
  11. package/dist/client/endpoints/base.d.ts +41 -7
  12. package/dist/client/endpoints/base.d.ts.map +1 -1
  13. package/dist/client/endpoints/base.js +61 -40
  14. package/dist/client/endpoints/base.js.map +1 -1
  15. package/dist/client/endpoints/showcases.d.ts +31 -0
  16. package/dist/client/endpoints/showcases.d.ts.map +1 -0
  17. package/dist/client/endpoints/showcases.js +49 -0
  18. package/dist/client/endpoints/showcases.js.map +1 -0
  19. package/dist/client/errors.d.ts +1 -0
  20. package/dist/client/errors.d.ts.map +1 -1
  21. package/dist/client/errors.js +1 -1
  22. package/dist/client/errors.js.map +1 -1
  23. package/dist/client/index.d.ts +47 -38
  24. package/dist/client/index.d.ts.map +1 -1
  25. package/dist/client/index.js +89 -120
  26. package/dist/client/index.js.map +1 -1
  27. package/dist/client/resource-registry.d.ts +97 -0
  28. package/dist/client/resource-registry.d.ts.map +1 -0
  29. package/dist/client/resource-registry.js +157 -0
  30. package/dist/client/resource-registry.js.map +1 -0
  31. package/dist/client/transport.d.ts +99 -0
  32. package/dist/client/transport.d.ts.map +1 -0
  33. package/dist/client/transport.js +320 -0
  34. package/dist/client/transport.js.map +1 -0
  35. package/dist/client/types.d.ts +17 -6
  36. package/dist/client/types.d.ts.map +1 -1
  37. package/dist/client/types.js +28 -6
  38. package/dist/client/types.js.map +1 -1
  39. package/dist/cmd/animation-catalog.d.ts +26 -0
  40. package/dist/cmd/animation-catalog.d.ts.map +1 -0
  41. package/dist/cmd/animation-catalog.js +80 -0
  42. package/dist/cmd/animation-catalog.js.map +1 -0
  43. package/dist/cmd/api.d.ts +3 -2
  44. package/dist/cmd/api.d.ts.map +1 -1
  45. package/dist/cmd/api.js +22 -8
  46. package/dist/cmd/api.js.map +1 -1
  47. package/dist/cmd/auth.d.ts.map +1 -1
  48. package/dist/cmd/auth.js +5 -0
  49. package/dist/cmd/auth.js.map +1 -1
  50. package/dist/cmd/balance.d.ts.map +1 -1
  51. package/dist/cmd/balance.js +10 -6
  52. package/dist/cmd/balance.js.map +1 -1
  53. package/dist/cmd/creative-lab.d.ts +26 -0
  54. package/dist/cmd/creative-lab.d.ts.map +1 -0
  55. package/dist/cmd/creative-lab.js +256 -0
  56. package/dist/cmd/creative-lab.js.map +1 -0
  57. package/dist/cmd/delete.d.ts.map +1 -1
  58. package/dist/cmd/delete.js +6 -7
  59. package/dist/cmd/delete.js.map +1 -1
  60. package/dist/cmd/doctor.d.ts +23 -0
  61. package/dist/cmd/doctor.d.ts.map +1 -0
  62. package/dist/cmd/doctor.js +61 -0
  63. package/dist/cmd/doctor.js.map +1 -0
  64. package/dist/cmd/download.d.ts +17 -0
  65. package/dist/cmd/download.d.ts.map +1 -0
  66. package/dist/cmd/download.js +436 -0
  67. package/dist/cmd/download.js.map +1 -0
  68. package/dist/cmd/inspect.d.ts +63 -0
  69. package/dist/cmd/inspect.d.ts.map +1 -0
  70. package/dist/cmd/inspect.js +179 -0
  71. package/dist/cmd/inspect.js.map +1 -0
  72. package/dist/cmd/make.d.ts +13 -3
  73. package/dist/cmd/make.d.ts.map +1 -1
  74. package/dist/cmd/make.js +240 -36
  75. package/dist/cmd/make.js.map +1 -1
  76. package/dist/cmd/mesh.d.ts +13 -0
  77. package/dist/cmd/mesh.d.ts.map +1 -0
  78. package/dist/cmd/mesh.js +67 -0
  79. package/dist/cmd/mesh.js.map +1 -0
  80. package/dist/cmd/project.d.ts +16 -0
  81. package/dist/cmd/project.d.ts.map +1 -0
  82. package/dist/cmd/project.js +136 -0
  83. package/dist/cmd/project.js.map +1 -0
  84. package/dist/cmd/resources.d.ts +5 -0
  85. package/dist/cmd/resources.d.ts.map +1 -1
  86. package/dist/cmd/resources.js +38 -10
  87. package/dist/cmd/resources.js.map +1 -1
  88. package/dist/cmd/showcases.d.ts +10 -0
  89. package/dist/cmd/showcases.d.ts.map +1 -0
  90. package/dist/cmd/showcases.js +63 -0
  91. package/dist/cmd/showcases.js.map +1 -0
  92. package/dist/cmd/slicer.d.ts +12 -0
  93. package/dist/cmd/slicer.d.ts.map +1 -0
  94. package/dist/cmd/slicer.js +46 -0
  95. package/dist/cmd/slicer.js.map +1 -0
  96. package/dist/cmd/uv-unwrap.d.ts +16 -0
  97. package/dist/cmd/uv-unwrap.d.ts.map +1 -0
  98. package/dist/cmd/uv-unwrap.js +52 -0
  99. package/dist/cmd/uv-unwrap.js.map +1 -0
  100. package/dist/index.d.ts +13 -1
  101. package/dist/index.d.ts.map +1 -1
  102. package/dist/index.js +141 -8
  103. package/dist/index.js.map +1 -1
  104. package/dist/internal/artifacts.d.ts +97 -0
  105. package/dist/internal/artifacts.d.ts.map +1 -0
  106. package/dist/internal/artifacts.js +280 -0
  107. package/dist/internal/artifacts.js.map +1 -0
  108. package/dist/internal/atomic-file.d.ts +39 -0
  109. package/dist/internal/atomic-file.d.ts.map +1 -0
  110. package/dist/internal/atomic-file.js +160 -0
  111. package/dist/internal/atomic-file.js.map +1 -0
  112. package/dist/internal/command-helpers.d.ts +46 -0
  113. package/dist/internal/command-helpers.d.ts.map +1 -0
  114. package/dist/internal/command-helpers.js +61 -0
  115. package/dist/internal/command-helpers.js.map +1 -0
  116. package/dist/internal/config.d.ts +48 -5
  117. package/dist/internal/config.d.ts.map +1 -1
  118. package/dist/internal/config.js +95 -6
  119. package/dist/internal/config.js.map +1 -1
  120. package/dist/internal/context.d.ts +25 -0
  121. package/dist/internal/context.d.ts.map +1 -0
  122. package/dist/internal/context.js +37 -0
  123. package/dist/internal/context.js.map +1 -0
  124. package/dist/internal/credentials.d.ts +11 -0
  125. package/dist/internal/credentials.d.ts.map +1 -1
  126. package/dist/internal/credentials.js +2 -0
  127. package/dist/internal/credentials.js.map +1 -1
  128. package/dist/internal/doctor.d.ts +94 -0
  129. package/dist/internal/doctor.d.ts.map +1 -0
  130. package/dist/internal/doctor.js +280 -0
  131. package/dist/internal/doctor.js.map +1 -0
  132. package/dist/internal/download.d.ts +147 -13
  133. package/dist/internal/download.d.ts.map +1 -1
  134. package/dist/internal/download.js +735 -142
  135. package/dist/internal/download.js.map +1 -1
  136. package/dist/internal/env-file.d.ts +29 -0
  137. package/dist/internal/env-file.d.ts.map +1 -0
  138. package/dist/internal/env-file.js +95 -0
  139. package/dist/internal/env-file.js.map +1 -0
  140. package/dist/internal/errors.d.ts +74 -1
  141. package/dist/internal/errors.d.ts.map +1 -1
  142. package/dist/internal/errors.js +173 -1
  143. package/dist/internal/errors.js.map +1 -1
  144. package/dist/internal/file-input.d.ts +52 -12
  145. package/dist/internal/file-input.d.ts.map +1 -1
  146. package/dist/internal/file-input.js +162 -33
  147. package/dist/internal/file-input.js.map +1 -1
  148. package/dist/internal/global-options.d.ts +6 -4
  149. package/dist/internal/global-options.d.ts.map +1 -1
  150. package/dist/internal/global-options.js +19 -4
  151. package/dist/internal/global-options.js.map +1 -1
  152. package/dist/internal/image-models.d.ts +9 -2
  153. package/dist/internal/image-models.d.ts.map +1 -1
  154. package/dist/internal/image-models.js +24 -12
  155. package/dist/internal/image-models.js.map +1 -1
  156. package/dist/internal/inspect.d.ts +67 -0
  157. package/dist/internal/inspect.d.ts.map +1 -0
  158. package/dist/internal/inspect.js +111 -0
  159. package/dist/internal/inspect.js.map +1 -0
  160. package/dist/internal/lock.d.ts +19 -0
  161. package/dist/internal/lock.d.ts.map +1 -0
  162. package/dist/internal/lock.js +66 -0
  163. package/dist/internal/lock.js.map +1 -0
  164. package/dist/internal/material-links.d.ts +115 -0
  165. package/dist/internal/material-links.d.ts.map +1 -0
  166. package/dist/internal/material-links.js +577 -0
  167. package/dist/internal/material-links.js.map +1 -0
  168. package/dist/internal/obj-transform.d.ts +115 -0
  169. package/dist/internal/obj-transform.d.ts.map +1 -0
  170. package/dist/internal/obj-transform.js +649 -0
  171. package/dist/internal/obj-transform.js.map +1 -0
  172. package/dist/internal/operation-store.d.ts +123 -0
  173. package/dist/internal/operation-store.d.ts.map +1 -0
  174. package/dist/internal/operation-store.js +229 -0
  175. package/dist/internal/operation-store.js.map +1 -0
  176. package/dist/internal/output.d.ts +20 -2
  177. package/dist/internal/output.d.ts.map +1 -1
  178. package/dist/internal/output.js +32 -4
  179. package/dist/internal/output.js.map +1 -1
  180. package/dist/internal/paths.d.ts +89 -0
  181. package/dist/internal/paths.d.ts.map +1 -0
  182. package/dist/internal/paths.js +168 -0
  183. package/dist/internal/paths.js.map +1 -0
  184. package/dist/internal/payload.d.ts +15 -0
  185. package/dist/internal/payload.d.ts.map +1 -1
  186. package/dist/internal/payload.js +50 -3
  187. package/dist/internal/payload.js.map +1 -1
  188. package/dist/internal/poll.d.ts +30 -4
  189. package/dist/internal/poll.d.ts.map +1 -1
  190. package/dist/internal/poll.js +99 -16
  191. package/dist/internal/poll.js.map +1 -1
  192. package/dist/internal/project-store.d.ts +197 -0
  193. package/dist/internal/project-store.d.ts.map +1 -0
  194. package/dist/internal/project-store.js +467 -0
  195. package/dist/internal/project-store.js.map +1 -0
  196. package/dist/internal/result.d.ts +50 -0
  197. package/dist/internal/result.d.ts.map +1 -0
  198. package/dist/internal/result.js +41 -0
  199. package/dist/internal/result.js.map +1 -0
  200. package/dist/internal/runtime.d.ts +35 -5
  201. package/dist/internal/runtime.d.ts.map +1 -1
  202. package/dist/internal/runtime.js +68 -18
  203. package/dist/internal/runtime.js.map +1 -1
  204. package/dist/internal/slicers.d.ts +117 -0
  205. package/dist/internal/slicers.d.ts.map +1 -0
  206. package/dist/internal/slicers.js +314 -0
  207. package/dist/internal/slicers.js.map +1 -0
  208. package/dist/internal/stream.d.ts +58 -0
  209. package/dist/internal/stream.d.ts.map +1 -0
  210. package/dist/internal/stream.js +280 -0
  211. package/dist/internal/stream.js.map +1 -0
  212. package/dist/internal/task-command.d.ts +128 -11
  213. package/dist/internal/task-command.d.ts.map +1 -1
  214. package/dist/internal/task-command.js +991 -111
  215. package/dist/internal/task-command.js.map +1 -1
  216. package/dist/internal/task-view.d.ts +56 -0
  217. package/dist/internal/task-view.d.ts.map +1 -0
  218. package/dist/internal/task-view.js +95 -0
  219. package/dist/internal/task-view.js.map +1 -0
  220. package/dist/internal/update-notifier.d.ts +5 -1
  221. package/dist/internal/update-notifier.d.ts.map +1 -1
  222. package/dist/internal/update-notifier.js +7 -3
  223. package/dist/internal/update-notifier.js.map +1 -1
  224. package/dist/root.d.ts +10 -0
  225. package/dist/root.d.ts.map +1 -1
  226. package/dist/root.js +75 -10
  227. package/dist/root.js.map +1 -1
  228. package/package.json +3 -2
  229. package/skills/meshy-cli/SKILL.md +140 -59
  230. package/dist/client/endpoints/analyze-printability.d.ts +0 -5
  231. package/dist/client/endpoints/analyze-printability.d.ts.map +0 -1
  232. package/dist/client/endpoints/analyze-printability.js +0 -7
  233. package/dist/client/endpoints/analyze-printability.js.map +0 -1
  234. package/dist/client/endpoints/animate.d.ts +0 -6
  235. package/dist/client/endpoints/animate.d.ts.map +0 -1
  236. package/dist/client/endpoints/animate.js +0 -8
  237. package/dist/client/endpoints/animate.js.map +0 -1
  238. package/dist/client/endpoints/convert.d.ts +0 -5
  239. package/dist/client/endpoints/convert.d.ts.map +0 -1
  240. package/dist/client/endpoints/convert.js +0 -7
  241. package/dist/client/endpoints/convert.js.map +0 -1
  242. package/dist/client/endpoints/image-to-3d.d.ts +0 -5
  243. package/dist/client/endpoints/image-to-3d.d.ts.map +0 -1
  244. package/dist/client/endpoints/image-to-3d.js +0 -7
  245. package/dist/client/endpoints/image-to-3d.js.map +0 -1
  246. package/dist/client/endpoints/image-to-image.d.ts +0 -5
  247. package/dist/client/endpoints/image-to-image.d.ts.map +0 -1
  248. package/dist/client/endpoints/image-to-image.js +0 -7
  249. package/dist/client/endpoints/image-to-image.js.map +0 -1
  250. package/dist/client/endpoints/multi-color-print.d.ts +0 -5
  251. package/dist/client/endpoints/multi-color-print.d.ts.map +0 -1
  252. package/dist/client/endpoints/multi-color-print.js +0 -7
  253. package/dist/client/endpoints/multi-color-print.js.map +0 -1
  254. package/dist/client/endpoints/multi-image-to-3d.d.ts +0 -5
  255. package/dist/client/endpoints/multi-image-to-3d.d.ts.map +0 -1
  256. package/dist/client/endpoints/multi-image-to-3d.js +0 -7
  257. package/dist/client/endpoints/multi-image-to-3d.js.map +0 -1
  258. package/dist/client/endpoints/remesh.d.ts +0 -5
  259. package/dist/client/endpoints/remesh.d.ts.map +0 -1
  260. package/dist/client/endpoints/remesh.js +0 -7
  261. package/dist/client/endpoints/remesh.js.map +0 -1
  262. package/dist/client/endpoints/repair-printability.d.ts +0 -5
  263. package/dist/client/endpoints/repair-printability.d.ts.map +0 -1
  264. package/dist/client/endpoints/repair-printability.js +0 -7
  265. package/dist/client/endpoints/repair-printability.js.map +0 -1
  266. package/dist/client/endpoints/resize.d.ts +0 -5
  267. package/dist/client/endpoints/resize.d.ts.map +0 -1
  268. package/dist/client/endpoints/resize.js +0 -7
  269. package/dist/client/endpoints/resize.js.map +0 -1
  270. package/dist/client/endpoints/retexture.d.ts +0 -5
  271. package/dist/client/endpoints/retexture.d.ts.map +0 -1
  272. package/dist/client/endpoints/retexture.js +0 -7
  273. package/dist/client/endpoints/retexture.js.map +0 -1
  274. package/dist/client/endpoints/rigging.d.ts +0 -6
  275. package/dist/client/endpoints/rigging.d.ts.map +0 -1
  276. package/dist/client/endpoints/rigging.js +0 -8
  277. package/dist/client/endpoints/rigging.js.map +0 -1
  278. package/dist/client/endpoints/text-to-3d.d.ts +0 -6
  279. package/dist/client/endpoints/text-to-3d.d.ts.map +0 -1
  280. package/dist/client/endpoints/text-to-3d.js +0 -8
  281. package/dist/client/endpoints/text-to-3d.js.map +0 -1
  282. package/dist/client/endpoints/text-to-image.d.ts +0 -5
  283. package/dist/client/endpoints/text-to-image.d.ts.map +0 -1
  284. package/dist/client/endpoints/text-to-image.js +0 -7
  285. package/dist/client/endpoints/text-to-image.js.map +0 -1
  286. package/dist/client/endpoints/text-to-motion.d.ts +0 -6
  287. package/dist/client/endpoints/text-to-motion.d.ts.map +0 -1
  288. package/dist/client/endpoints/text-to-motion.js +0 -8
  289. package/dist/client/endpoints/text-to-motion.js.map +0 -1
@@ -0,0 +1,16 @@
1
+ /**
2
+ * uv-unwrap — https://docs.meshy.ai/en/api/uv-unwrap
3
+ *
4
+ * Generates fresh UVs for a GLB (≤ 40,000 faces) and returns a "UV white
5
+ * model" (grey placeholder material, no textures) for external texturing.
6
+ *
7
+ * Exactly one source is accepted — `--input-task-id` or `--model-url` — also
8
+ * when supplied through --data. The server would prefer input_task_id if both
9
+ * were sent; refusing the ambiguity here is cheaper than a surprise. Input
10
+ * files must be GLB. A face count above 40k is the server's call (400); the
11
+ * CLI never downloads a model just to pre-count faces — `meshy inspect faces`
12
+ * answers that from a saved task when the field is available.
13
+ */
14
+ export declare const UV_UNWRAP_FACE_CEILING = 40000;
15
+ export declare const uvUnwrapCommand: import("commander").Command;
16
+ //# sourceMappingURL=uv-unwrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uv-unwrap.d.ts","sourceRoot":"","sources":["../../src/cmd/uv-unwrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,eAAO,MAAM,sBAAsB,QAAS,CAAC;AAoC7C,eAAO,MAAM,eAAe,6BAA6B,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * uv-unwrap — https://docs.meshy.ai/en/api/uv-unwrap
3
+ *
4
+ * Generates fresh UVs for a GLB (≤ 40,000 faces) and returns a "UV white
5
+ * model" (grey placeholder material, no textures) for external texturing.
6
+ *
7
+ * Exactly one source is accepted — `--input-task-id` or `--model-url` — also
8
+ * when supplied through --data. The server would prefer input_task_id if both
9
+ * were sent; refusing the ambiguity here is cheaper than a surprise. Input
10
+ * files must be GLB. A face count above 40k is the server's call (400); the
11
+ * CLI never downloads a model just to pre-count faces — `meshy inspect faces`
12
+ * answers that from a saved task when the field is available.
13
+ */
14
+ import { UsageError } from "../internal/errors.js";
15
+ import { buildResourceCommand } from "../internal/task-command.js";
16
+ export const UV_UNWRAP_FACE_CEILING = 40_000;
17
+ const spec = {
18
+ name: "uv-unwrap",
19
+ defaultSchema: "v1",
20
+ description: "Generate fresh UVs for a GLB model (input task or GLB file, at most 40k faces) — outputs a UV " +
21
+ "white model for external texturing. Remesh first if the mesh is denser",
22
+ create: {
23
+ description: "Create a uv-unwrap task",
24
+ configure(cmd) {
25
+ return cmd
26
+ .option("--input-task-id <id>", "SUCCEEDED source task with a GLB output (mutually exclusive with --model-url)")
27
+ .option("--model-url <src>", "GLB model as http(s) URL, data: URI or local .glb path (mutually exclusive with --input-task-id)");
28
+ },
29
+ toPayload(opts) {
30
+ return {
31
+ input_task_id: opts.inputTaskId,
32
+ model_url: opts.modelUrl,
33
+ };
34
+ },
35
+ validatePayload(payload) {
36
+ const hasTask = payload.input_task_id !== undefined && payload.input_task_id !== null && payload.input_task_id !== "";
37
+ const hasModel = payload.model_url !== undefined && payload.model_url !== null && payload.model_url !== "";
38
+ if (hasTask && hasModel) {
39
+ throw new UsageError("uv-unwrap takes exactly one source: --input-task-id or --model-url (also inside --data), not both");
40
+ }
41
+ if (!hasTask && !hasModel) {
42
+ throw new UsageError("provide --input-task-id or --model-url");
43
+ }
44
+ if (hasTask && typeof payload.input_task_id !== "string")
45
+ throw new UsageError("input_task_id must be a string");
46
+ if (hasModel && typeof payload.model_url !== "string")
47
+ throw new UsageError("model_url must be a string");
48
+ },
49
+ },
50
+ };
51
+ export const uvUnwrapCommand = buildResourceCommand(spec);
52
+ //# sourceMappingURL=uv-unwrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uv-unwrap.js","sourceRoot":"","sources":["../../src/cmd/uv-unwrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAA4B,MAAM,6BAA6B,CAAC;AAE7F,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAE7C,MAAM,IAAI,GAAwB;IAChC,IAAI,EAAE,WAAW;IACjB,aAAa,EAAE,IAAI;IACnB,WAAW,EACT,gGAAgG;QAChG,wEAAwE;IAC1E,MAAM,EAAE;QACN,WAAW,EAAE,yBAAyB;QACtC,SAAS,CAAC,GAAG;YACX,OAAO,GAAG;iBACP,MAAM,CAAC,sBAAsB,EAAE,+EAA+E,CAAC;iBAC/G,MAAM,CAAC,mBAAmB,EAAE,kGAAkG,CAAC,CAAC;QACrI,CAAC;QACD,SAAS,CAAC,IAAI;YACZ,OAAO;gBACL,aAAa,EAAE,IAAI,CAAC,WAAW;gBAC/B,SAAS,EAAE,IAAI,CAAC,QAAQ;aACzB,CAAC;QACJ,CAAC;QACD,eAAe,CAAC,OAAO;YACrB,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,KAAK,SAAS,IAAI,OAAO,CAAC,aAAa,KAAK,IAAI,IAAI,OAAO,CAAC,aAAa,KAAK,EAAE,CAAC;YACtH,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI,IAAI,OAAO,CAAC,SAAS,KAAK,EAAE,CAAC;YAC3G,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;gBACxB,MAAM,IAAI,UAAU,CAAC,mGAAmG,CAAC,CAAC;YAC5H,CAAC;YACD,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC1B,MAAM,IAAI,UAAU,CAAC,wCAAwC,CAAC,CAAC;YACjE,CAAC;YACD,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,aAAa,KAAK,QAAQ;gBAAE,MAAM,IAAI,UAAU,CAAC,gCAAgC,CAAC,CAAC;YACjH,IAAI,QAAQ,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ;gBAAE,MAAM,IAAI,UAAU,CAAC,4BAA4B,CAAC,CAAC;QAC5G,CAAC;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,18 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
3
  * meshy-cli entry point.
4
+ *
5
+ * Responsibilities kept here on purpose:
6
+ * - decide whether the background update check may run before anything else;
7
+ * - turn SIGINT into a cooperative abort (exit 130) instead of a hard kill;
8
+ * - route every failure — including Commander parse errors — through one
9
+ * exit that renders the payload in the schema the command would have used;
10
+ * - flush stdout before exiting.
4
11
  */
5
- export {};
12
+ /**
13
+ * The update check never runs for local work: no network, no detached child.
14
+ * Local means the command touches neither the API nor the update state, or
15
+ * the caller said so.
16
+ */
17
+ export declare function shouldRunUpdateCheck(argv: string[], env?: NodeJS.ProcessEnv): boolean;
6
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;GAEG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;GASG;AAgCH;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAWlG"}
package/dist/index.js CHANGED
@@ -1,23 +1,117 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
3
  * meshy-cli entry point.
4
+ *
5
+ * Responsibilities kept here on purpose:
6
+ * - decide whether the background update check may run before anything else;
7
+ * - turn SIGINT into a cooperative abort (exit 130) instead of a hard kill;
8
+ * - route every failure — including Commander parse errors — through one
9
+ * exit that renders the payload in the schema the command would have used;
10
+ * - flush stdout before exiting.
4
11
  */
5
- import { buildRootCommand } from "./root.js";
6
- import { exitCodeFor, reportError } from "./internal/errors.js";
7
- import { refreshCache } from "./internal/update-notifier.js";
12
+ import { buildRootCommand, V1_ONLY_COMMANDS, LOCAL_COMMANDS } from "./root.js";
13
+ import { currentCommand, markInterrupted, wasInterrupted } from "./internal/context.js";
14
+ import { exitCodeFor, isCommanderInformational, reportError, CliError } from "./internal/errors.js";
15
+ import { emitEnvelope, writeStdout } from "./internal/output.js";
16
+ import { errorEnvelope } from "./internal/result.js";
17
+ import { refreshCache, shouldSkip } from "./internal/update-notifier.js";
8
18
  async function main() {
9
- refreshCache(); // fire-and-forget; internally guarded; never throws
19
+ const argv = process.argv;
20
+ if (argv.includes("--no-update-check")) {
21
+ // Children (none today, but any future spawn) inherit the opt-out.
22
+ process.env["MESHY_CLI_NO_UPDATE_NOTIFIER"] = "1";
23
+ }
24
+ if (shouldRunUpdateCheck(argv))
25
+ refreshCache(); // fire-and-forget; internally guarded; never throws
26
+ installSignalHandlers();
10
27
  const program = buildRootCommand();
11
28
  try {
12
- await program.parseAsync(process.argv);
29
+ await program.parseAsync(argv);
13
30
  const code = process.exitCode ?? 0;
14
31
  return typeof code === "number" ? code : 1;
15
32
  }
16
33
  catch (err) {
17
- const fmt = resolveErrorFormat(program);
18
- reportError(err, fmt);
19
- return exitCodeFor(err);
34
+ if (isCommanderInformational(err))
35
+ return err.exitCode;
36
+ return await reportFailure(program, argv, err);
37
+ }
38
+ }
39
+ /**
40
+ * The update check never runs for local work: no network, no detached child.
41
+ * Local means the command touches neither the API nor the update state, or
42
+ * the caller said so.
43
+ */
44
+ export function shouldRunUpdateCheck(argv, env = process.env) {
45
+ if (shouldSkip(env))
46
+ return false;
47
+ if (argv.includes("--no-update-check"))
48
+ return false;
49
+ const rest = argv.slice(2);
50
+ if (rest.length === 0)
51
+ return false;
52
+ if (rest.some((a) => a === "--help" || a === "-h" || a === "--version" || a === "-V"))
53
+ return false;
54
+ const first = rest.find((a) => !a.startsWith("-"));
55
+ if (!first)
56
+ return false;
57
+ if (LOCAL_COMMANDS.has(first))
58
+ return false;
59
+ if (first === "make" && rest.includes("--dry-run"))
60
+ return false;
61
+ return true;
62
+ }
63
+ function installSignalHandlers() {
64
+ let count = 0;
65
+ process.on("SIGINT", () => {
66
+ count += 1;
67
+ if (count === 1) {
68
+ markInterrupted();
69
+ process.stderr.write("\ninterrupted — finishing local bookkeeping; press Ctrl-C again to force exit\n");
70
+ return;
71
+ }
72
+ process.exit(130);
73
+ });
74
+ }
75
+ async function reportFailure(program, argv, err) {
76
+ const ctx = currentCommand();
77
+ const schema = ctx?.schema ?? resolveSchemaHeuristically(program, argv);
78
+ const format = ctx?.format ?? resolveErrorFormat(program);
79
+ // A SIGINT that surfaced as some other failure is still reported as
80
+ // interrupted — but whatever the command already knew (task id, submission,
81
+ // files written so far, recovery command) travels with it.
82
+ const interruptedErr = wasInterrupted() && !(err instanceof CliError && err.code === "interrupted")
83
+ ? new CliError({
84
+ code: "interrupted",
85
+ message: `interrupted by SIGINT${err instanceof Error && err.message ? ` (${err.message})` : ""}`,
86
+ result: err instanceof CliError ? err.result : null,
87
+ warnings: err instanceof CliError ? err.warnings : [],
88
+ recovery: err instanceof CliError ? err.recovery : null,
89
+ hint: err instanceof CliError ? err.hint : undefined,
90
+ cause: err,
91
+ })
92
+ : err;
93
+ if (schema === "v1") {
94
+ const command = ctx?.command ?? commandNameFromArgv(program, argv);
95
+ const { envelope, exitCode } = errorEnvelope(command, interruptedErr);
96
+ process.stderr.write(`error: ${envelope.error?.message ?? "unknown error"}\n`);
97
+ if (envelope.error?.hint)
98
+ process.stderr.write(`hint: ${envelope.error.hint}\n`);
99
+ try {
100
+ await emitEnvelope(envelope, format);
101
+ }
102
+ catch {
103
+ /* stderr already carries the human message */
104
+ }
105
+ return exitCode;
106
+ }
107
+ reportError(interruptedErr, format);
108
+ try {
109
+ await writeStdout("");
110
+ }
111
+ catch {
112
+ /* nothing to flush */
20
113
  }
114
+ return exitCodeFor(interruptedErr);
21
115
  }
22
116
  /**
23
117
  * Resolve the output format for the error path.
@@ -42,5 +136,44 @@ function resolveErrorFormat(program) {
42
136
  const v = (typeof raw === "string" ? raw : "json").toLowerCase();
43
137
  return v === "pretty" || v === "ndjson" ? v : "json";
44
138
  }
139
+ /**
140
+ * Before an action ran we only know argv. `--output-schema` is a root option,
141
+ * so a parsed value is authoritative; otherwise the first command token decides
142
+ * (new commands are v1-only, everything else is legacy).
143
+ */
144
+ function resolveSchemaHeuristically(program, argv) {
145
+ const parsed = program.opts()["outputSchema"];
146
+ if (parsed === "v1" || parsed === "legacy")
147
+ return parsed;
148
+ const idx = argv.indexOf("--output-schema");
149
+ if (idx !== -1) {
150
+ const v = argv[idx + 1];
151
+ if (v === "v1" || v === "legacy")
152
+ return v;
153
+ }
154
+ const first = firstCommandToken(program, argv);
155
+ return first && V1_ONLY_COMMANDS.has(first) ? "v1" : "legacy";
156
+ }
157
+ function firstCommandToken(program, argv) {
158
+ const names = new Set(program.commands.map((c) => c.name()));
159
+ return argv.slice(2).find((a) => names.has(a));
160
+ }
161
+ function commandNameFromArgv(program, argv) {
162
+ const first = firstCommandToken(program, argv);
163
+ if (!first)
164
+ return "meshy";
165
+ const rest = argv.slice(argv.indexOf(first) + 1).filter((a) => !a.startsWith("-"));
166
+ const sub = program.commands.find((c) => c.name() === first);
167
+ const path = [first];
168
+ let node = sub;
169
+ for (const token of rest) {
170
+ const next = node?.commands.find((c) => c.name() === token);
171
+ if (!next)
172
+ break;
173
+ path.push(token);
174
+ node = next;
175
+ }
176
+ return path.join(".");
177
+ }
45
178
  main().then((code) => process.exit(code));
46
179
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;GAEG;AAIH,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,KAAK,UAAU,IAAI;IACjB,YAAY,EAAE,CAAC,CAAC,oDAAoD;IACpE,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;QACnC,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACxC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACtB,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAS,kBAAkB,CACzB,OAAgB;IAEhB,MAAM,OAAO,GAAG,CAAC,GAAY,EAAW,EAAE,CACxC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5D,IAAI,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,MAAM,CAAC;IACpC,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,CAAC,GAAG,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IACjE,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACvD,CAAC;AAED,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Asset enumeration — which files a task exposes, under stable keys.
3
+ *
4
+ * Only known response fields are walked; an unknown string URL anywhere in
5
+ * `result` is reported under `unknown_urls` and never downloaded. Keys are
6
+ * the stable selectors of `meshy download --asset` and of the v1 download
7
+ * manifest; the file name is derived separately and never from the key or
8
+ * the URL alone.
9
+ *
10
+ * Product knowledge that changes the delivery format lives here too:
11
+ * - lamp build: `lamp_stl` / `base_stl` are STL files, `bundle_zip` is a ZIP;
12
+ * - keychain / fridge-magnet build: `model_urls.obj` is a ZIP bundle
13
+ * (model.obj + model.mtl + texture.png), delivered as `.zip`, unextracted;
14
+ * - motion clips carry their format in `result.motion_format`.
15
+ */
16
+ import type { TaskResourceDescriptor } from "../client/resource-registry.js";
17
+ export type AssetKind = "model" | "image" | "texture" | "thumbnail" | "rig" | "animation" | "motion" | "report";
18
+ export interface Asset {
19
+ /** Stable selector, e.g. `model.glb`, `thumbnail.primary`, `result.basic_animations.walking_glb_url`. */
20
+ key: string;
21
+ kind: AssetKind;
22
+ url: string | null;
23
+ /** File format the bytes are expected to be in (extension without dot), or null when unknown. */
24
+ format: string | null;
25
+ /** Set when the file is a container for the nominal format (keychain OBJ is a ZIP). */
26
+ containerFormat: string | null;
27
+ /** Nominal model format when it differs from the file (e.g. `obj` inside a ZIP). */
28
+ modelFormat: string | null;
29
+ /** Response path the asset came from. */
30
+ sourcePath: string;
31
+ /** Suggested safe file name (directory mode). */
32
+ filename: string;
33
+ /** Keys this asset needs to be usable (OBJ → MTL → textures). */
34
+ dependencies: string[];
35
+ /** Report assets carry their JSON here instead of a URL. */
36
+ report?: unknown;
37
+ /** Extra flags for the manifest (e.g. extracted:false for bundles). */
38
+ notes?: Record<string, unknown>;
39
+ }
40
+ export interface AssetEnumeration {
41
+ assets: Asset[];
42
+ /** String URLs found in `result` that no rule recognised. */
43
+ unknown_urls: Array<{
44
+ path: string;
45
+ url: string;
46
+ }>;
47
+ product: string | null;
48
+ }
49
+ /** Creative Lab product from a task type such as `creative-lab-keychain-build`. */
50
+ export declare function productFromTaskType(type: unknown): {
51
+ product: string;
52
+ stage: string;
53
+ } | null;
54
+ /**
55
+ * The asset a `model_urls` entry stands for. Shared with the legacy `-o`
56
+ * downloader so both paths name Creative Lab parts the same way (`lamp.stl`,
57
+ * `base.stl`, `bundle.zip`, the keychain/fridge-magnet OBJ bundle as
58
+ * `model.obj.zip`) instead of turning the key into an extension.
59
+ */
60
+ export declare function modelAsset(fmtKey: string, url: string, product: string | null): Asset;
61
+ /**
62
+ * Enumerate every downloadable asset of a task object (raw API shape).
63
+ * `descriptor` (when known) supplies the product for Creative Lab builds.
64
+ */
65
+ export declare function enumerateAssets(task: Record<string, unknown>, descriptor?: TaskResourceDescriptor | null): AssetEnumeration;
66
+ /** 0.2.0 artifact keys → stable keys, so old scripts and internal tests keep resolving. */
67
+ export declare const LEGACY_KEY_ALIASES: Readonly<Record<string, string>>;
68
+ export declare function resolveAssetKey(requested: string, assets: readonly Asset[]): Asset | undefined;
69
+ export interface Selection {
70
+ keys?: string[];
71
+ modelFormat?: string;
72
+ kind?: AssetKind;
73
+ all?: boolean;
74
+ }
75
+ export interface SelectionResult {
76
+ selected: Asset[];
77
+ /** Dependencies pulled in for selected OBJ files (empty when geometryOnly). */
78
+ dependencies: Asset[];
79
+ missingDependencies: string[];
80
+ }
81
+ /**
82
+ * Apply a selector to the enumeration. Exactly one selector kind must be
83
+ * given; contradictory combinations are rejected by the caller (usage).
84
+ * With `withDependencies`, an OBJ selection pulls its MTL and textures.
85
+ */
86
+ export declare function selectAssets(enumeration: AssetEnumeration, sel: Selection, opts: {
87
+ withDependencies: boolean;
88
+ }): SelectionResult;
89
+ export declare class SelectionError extends Error {
90
+ readonly candidates: Array<{
91
+ key: string;
92
+ kind: AssetKind;
93
+ format: string | null;
94
+ }>;
95
+ constructor(message: string, assets: readonly Asset[]);
96
+ }
97
+ //# sourceMappingURL=artifacts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../../src/internal/artifacts.ts"],"names":[],"mappings":"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"}