@meshy-ai/cli 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (285) hide show
  1. package/.env.example +8 -2
  2. package/README.md +342 -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/inspect.d.ts +67 -0
  153. package/dist/internal/inspect.d.ts.map +1 -0
  154. package/dist/internal/inspect.js +111 -0
  155. package/dist/internal/inspect.js.map +1 -0
  156. package/dist/internal/lock.d.ts +19 -0
  157. package/dist/internal/lock.d.ts.map +1 -0
  158. package/dist/internal/lock.js +66 -0
  159. package/dist/internal/lock.js.map +1 -0
  160. package/dist/internal/material-links.d.ts +115 -0
  161. package/dist/internal/material-links.d.ts.map +1 -0
  162. package/dist/internal/material-links.js +577 -0
  163. package/dist/internal/material-links.js.map +1 -0
  164. package/dist/internal/obj-transform.d.ts +115 -0
  165. package/dist/internal/obj-transform.d.ts.map +1 -0
  166. package/dist/internal/obj-transform.js +649 -0
  167. package/dist/internal/obj-transform.js.map +1 -0
  168. package/dist/internal/operation-store.d.ts +123 -0
  169. package/dist/internal/operation-store.d.ts.map +1 -0
  170. package/dist/internal/operation-store.js +229 -0
  171. package/dist/internal/operation-store.js.map +1 -0
  172. package/dist/internal/output.d.ts +20 -2
  173. package/dist/internal/output.d.ts.map +1 -1
  174. package/dist/internal/output.js +32 -4
  175. package/dist/internal/output.js.map +1 -1
  176. package/dist/internal/paths.d.ts +89 -0
  177. package/dist/internal/paths.d.ts.map +1 -0
  178. package/dist/internal/paths.js +168 -0
  179. package/dist/internal/paths.js.map +1 -0
  180. package/dist/internal/payload.d.ts +15 -0
  181. package/dist/internal/payload.d.ts.map +1 -1
  182. package/dist/internal/payload.js +50 -3
  183. package/dist/internal/payload.js.map +1 -1
  184. package/dist/internal/poll.d.ts +30 -4
  185. package/dist/internal/poll.d.ts.map +1 -1
  186. package/dist/internal/poll.js +99 -16
  187. package/dist/internal/poll.js.map +1 -1
  188. package/dist/internal/project-store.d.ts +197 -0
  189. package/dist/internal/project-store.d.ts.map +1 -0
  190. package/dist/internal/project-store.js +467 -0
  191. package/dist/internal/project-store.js.map +1 -0
  192. package/dist/internal/result.d.ts +50 -0
  193. package/dist/internal/result.d.ts.map +1 -0
  194. package/dist/internal/result.js +41 -0
  195. package/dist/internal/result.js.map +1 -0
  196. package/dist/internal/runtime.d.ts +35 -5
  197. package/dist/internal/runtime.d.ts.map +1 -1
  198. package/dist/internal/runtime.js +68 -18
  199. package/dist/internal/runtime.js.map +1 -1
  200. package/dist/internal/slicers.d.ts +117 -0
  201. package/dist/internal/slicers.d.ts.map +1 -0
  202. package/dist/internal/slicers.js +314 -0
  203. package/dist/internal/slicers.js.map +1 -0
  204. package/dist/internal/stream.d.ts +58 -0
  205. package/dist/internal/stream.d.ts.map +1 -0
  206. package/dist/internal/stream.js +280 -0
  207. package/dist/internal/stream.js.map +1 -0
  208. package/dist/internal/task-command.d.ts +128 -11
  209. package/dist/internal/task-command.d.ts.map +1 -1
  210. package/dist/internal/task-command.js +991 -111
  211. package/dist/internal/task-command.js.map +1 -1
  212. package/dist/internal/task-view.d.ts +56 -0
  213. package/dist/internal/task-view.d.ts.map +1 -0
  214. package/dist/internal/task-view.js +95 -0
  215. package/dist/internal/task-view.js.map +1 -0
  216. package/dist/internal/update-notifier.d.ts +5 -1
  217. package/dist/internal/update-notifier.d.ts.map +1 -1
  218. package/dist/internal/update-notifier.js +7 -3
  219. package/dist/internal/update-notifier.js.map +1 -1
  220. package/dist/root.d.ts +10 -0
  221. package/dist/root.d.ts.map +1 -1
  222. package/dist/root.js +75 -10
  223. package/dist/root.js.map +1 -1
  224. package/package.json +3 -2
  225. package/skills/meshy-cli/SKILL.md +140 -59
  226. package/dist/client/endpoints/analyze-printability.d.ts +0 -5
  227. package/dist/client/endpoints/analyze-printability.d.ts.map +0 -1
  228. package/dist/client/endpoints/analyze-printability.js +0 -7
  229. package/dist/client/endpoints/analyze-printability.js.map +0 -1
  230. package/dist/client/endpoints/animate.d.ts +0 -6
  231. package/dist/client/endpoints/animate.d.ts.map +0 -1
  232. package/dist/client/endpoints/animate.js +0 -8
  233. package/dist/client/endpoints/animate.js.map +0 -1
  234. package/dist/client/endpoints/convert.d.ts +0 -5
  235. package/dist/client/endpoints/convert.d.ts.map +0 -1
  236. package/dist/client/endpoints/convert.js +0 -7
  237. package/dist/client/endpoints/convert.js.map +0 -1
  238. package/dist/client/endpoints/image-to-3d.d.ts +0 -5
  239. package/dist/client/endpoints/image-to-3d.d.ts.map +0 -1
  240. package/dist/client/endpoints/image-to-3d.js +0 -7
  241. package/dist/client/endpoints/image-to-3d.js.map +0 -1
  242. package/dist/client/endpoints/image-to-image.d.ts +0 -5
  243. package/dist/client/endpoints/image-to-image.d.ts.map +0 -1
  244. package/dist/client/endpoints/image-to-image.js +0 -7
  245. package/dist/client/endpoints/image-to-image.js.map +0 -1
  246. package/dist/client/endpoints/multi-color-print.d.ts +0 -5
  247. package/dist/client/endpoints/multi-color-print.d.ts.map +0 -1
  248. package/dist/client/endpoints/multi-color-print.js +0 -7
  249. package/dist/client/endpoints/multi-color-print.js.map +0 -1
  250. package/dist/client/endpoints/multi-image-to-3d.d.ts +0 -5
  251. package/dist/client/endpoints/multi-image-to-3d.d.ts.map +0 -1
  252. package/dist/client/endpoints/multi-image-to-3d.js +0 -7
  253. package/dist/client/endpoints/multi-image-to-3d.js.map +0 -1
  254. package/dist/client/endpoints/remesh.d.ts +0 -5
  255. package/dist/client/endpoints/remesh.d.ts.map +0 -1
  256. package/dist/client/endpoints/remesh.js +0 -7
  257. package/dist/client/endpoints/remesh.js.map +0 -1
  258. package/dist/client/endpoints/repair-printability.d.ts +0 -5
  259. package/dist/client/endpoints/repair-printability.d.ts.map +0 -1
  260. package/dist/client/endpoints/repair-printability.js +0 -7
  261. package/dist/client/endpoints/repair-printability.js.map +0 -1
  262. package/dist/client/endpoints/resize.d.ts +0 -5
  263. package/dist/client/endpoints/resize.d.ts.map +0 -1
  264. package/dist/client/endpoints/resize.js +0 -7
  265. package/dist/client/endpoints/resize.js.map +0 -1
  266. package/dist/client/endpoints/retexture.d.ts +0 -5
  267. package/dist/client/endpoints/retexture.d.ts.map +0 -1
  268. package/dist/client/endpoints/retexture.js +0 -7
  269. package/dist/client/endpoints/retexture.js.map +0 -1
  270. package/dist/client/endpoints/rigging.d.ts +0 -6
  271. package/dist/client/endpoints/rigging.d.ts.map +0 -1
  272. package/dist/client/endpoints/rigging.js +0 -8
  273. package/dist/client/endpoints/rigging.js.map +0 -1
  274. package/dist/client/endpoints/text-to-3d.d.ts +0 -6
  275. package/dist/client/endpoints/text-to-3d.d.ts.map +0 -1
  276. package/dist/client/endpoints/text-to-3d.js +0 -8
  277. package/dist/client/endpoints/text-to-3d.js.map +0 -1
  278. package/dist/client/endpoints/text-to-image.d.ts +0 -5
  279. package/dist/client/endpoints/text-to-image.d.ts.map +0 -1
  280. package/dist/client/endpoints/text-to-image.js +0 -7
  281. package/dist/client/endpoints/text-to-image.js.map +0 -1
  282. package/dist/client/endpoints/text-to-motion.d.ts +0 -6
  283. package/dist/client/endpoints/text-to-motion.d.ts.map +0 -1
  284. package/dist/client/endpoints/text-to-motion.js +0 -8
  285. package/dist/client/endpoints/text-to-motion.js.map +0 -1
@@ -0,0 +1,314 @@
1
+ /**
2
+ * Slicer registry, detection and launch — the legacy `slicers.py` helper.
3
+ *
4
+ * Seven slicers are registered with the install locations the skill used; the
5
+ * `multicolor` flag is capability metadata only (the slicer can drive
6
+ * multi-material prints — it says nothing about a particular printer).
7
+ *
8
+ * Detection is a pure function of an injectable DetectionEnv so every
9
+ * platform's rules are testable on any host:
10
+ * macOS — `/Applications/<app>.app` and `~/Applications/<app>.app`
11
+ * Windows — `<ProgramFiles | ProgramFiles(x86)>\<dir>\<exe>`, where a `*`
12
+ * suffix on the registered directory matches versioned installs
13
+ * ("Creality Print 5.1", "UltiMaker Cura 5.7")
14
+ * Linux — the three executables the skill knew about, on PATH; the other
15
+ * four are reported as unsupported instead of guessed
16
+ *
17
+ * Launching only ever runs the detected path (or `open -a <bundle>` on macOS)
18
+ * with the model file as a single argv element: no shell, no string commands,
19
+ * no default-application fallback. The legacy Windows bug — detecting an exe
20
+ * under Program Files, then running a same-named exe from PATH — is exactly
21
+ * what the detected absolute path avoids. A spawn that fails is an error; a
22
+ * spawn that succeeds is `launch_requested`, never proof that the slicer
23
+ * imported the file. On macOS the short-lived `open` helper is awaited (bounded)
24
+ * for its exit status; GUI processes are never awaited.
25
+ */
26
+ import { spawn as nodeSpawn } from "node:child_process";
27
+ import { accessSync, constants as fsConstants, existsSync, readdirSync, statSync } from "node:fs";
28
+ import { homedir } from "node:os";
29
+ import { extname, posix, resolve as resolvePath, win32 } from "node:path";
30
+ import { CliError, UsageError } from "./errors.js";
31
+ export const SLICERS = [
32
+ { id: "orca-slicer", name: "OrcaSlicer", macApp: "OrcaSlicer", winExe: "orca-slicer.exe", winDir: "OrcaSlicer", linuxExe: "orca-slicer", multicolor: true },
33
+ { id: "bambu-studio", name: "Bambu Studio", macApp: "BambuStudio", winExe: "bambu-studio.exe", winDir: "BambuStudio", linuxExe: "bambu-studio", multicolor: true },
34
+ { id: "creality-print", name: "Creality Print", macApp: "Creality Print", winExe: "CrealityPrint.exe", winDir: "Creality Print*", linuxExe: null, multicolor: true },
35
+ { id: "elegoo-slicer", name: "Elegoo Slicer", macApp: "ElegooSlicer", winExe: "elegoo-slicer.exe", winDir: "ElegooSlicer", linuxExe: null, multicolor: true },
36
+ { id: "anycubic-slicer-next", name: "Anycubic Slicer Next", macApp: "AnycubicSlicerNext", winExe: "AnycubicSlicerNext.exe", winDir: "AnycubicSlicerNext", linuxExe: null, multicolor: true },
37
+ { id: "prusa-slicer", name: "PrusaSlicer", macApp: "PrusaSlicer", winExe: "prusa-slicer.exe", winDir: "PrusaSlicer", linuxExe: "prusa-slicer", multicolor: false },
38
+ { id: "ultimaker-cura", name: "UltiMaker Cura", macApp: "UltiMaker Cura", winExe: "UltiMaker-Cura.exe", winDir: "UltiMaker Cura*", linuxExe: null, multicolor: false },
39
+ ];
40
+ /** File types a slicer can be asked to open. Anything else is a usage error. */
41
+ export const LAUNCHABLE_EXTENSIONS = new Set(["obj", "stl", "3mf", "glb", "gltf", "step", "stp", "ply", "amf"]);
42
+ export const NO_LINUX_EXECUTABLE = "no registered Linux executable";
43
+ /** Environment variables on Windows are case-insensitive; plain records in tests are not. */
44
+ function envValue(env, name) {
45
+ if (env[name] !== undefined)
46
+ return env[name];
47
+ const lower = name.toLowerCase();
48
+ for (const [key, value] of Object.entries(env)) {
49
+ if (key.toLowerCase() === lower)
50
+ return value;
51
+ }
52
+ return undefined;
53
+ }
54
+ function isExecutableFile(path, platform) {
55
+ try {
56
+ if (!statSync(path).isFile())
57
+ return false;
58
+ if (platform !== "win32")
59
+ accessSync(path, fsConstants.X_OK);
60
+ return true;
61
+ }
62
+ catch {
63
+ return false;
64
+ }
65
+ }
66
+ /** PATH lookup using the simulated platform's delimiter and PATHEXT rules. */
67
+ function whichFromPath(env, platform) {
68
+ return (name) => {
69
+ const isWin = platform === "win32";
70
+ const p = isWin ? win32 : posix;
71
+ const dirs = (envValue(env, "PATH") ?? "").split(isWin ? ";" : ":").filter(Boolean);
72
+ const exts = isWin ? (envValue(env, "PATHEXT") ?? ".EXE;.CMD;.BAT;.COM").split(";").filter(Boolean) : [""];
73
+ for (const dir of dirs) {
74
+ for (const ext of exts) {
75
+ const candidate = p.join(dir, ext && !name.toLowerCase().endsWith(ext.toLowerCase()) ? `${name}${ext}` : name);
76
+ if (isExecutableFile(candidate, platform))
77
+ return candidate;
78
+ }
79
+ }
80
+ return null;
81
+ };
82
+ }
83
+ /** The real environment, with any field replaced by the caller (tests simulate other platforms). */
84
+ export function defaultDetectionEnv(overrides = {}) {
85
+ const platform = overrides.platform ?? process.platform;
86
+ const env = overrides.env ?? process.env;
87
+ return {
88
+ platform,
89
+ env,
90
+ home: overrides.home ?? homedir(),
91
+ exists: overrides.exists ?? ((path) => existsSync(path)),
92
+ readdir: overrides.readdir ??
93
+ ((dir) => {
94
+ try {
95
+ return readdirSync(dir);
96
+ }
97
+ catch {
98
+ return [];
99
+ }
100
+ }),
101
+ which: overrides.which ?? whichFromPath(env, platform),
102
+ };
103
+ }
104
+ function probeDarwin(s, env) {
105
+ const checked = [posix.join("/Applications", `${s.macApp}.app`), posix.join(env.home, "Applications", `${s.macApp}.app`)];
106
+ for (const candidate of checked) {
107
+ if (env.exists(candidate))
108
+ return { path: candidate, checked, unsupported: null };
109
+ }
110
+ return { path: null, checked, unsupported: null };
111
+ }
112
+ function probeWindows(s, env) {
113
+ const bases = [
114
+ envValue(env.env, "ProgramFiles") ?? "C:\\Program Files",
115
+ envValue(env.env, "ProgramFiles(x86)") ?? "C:\\Program Files (x86)",
116
+ ];
117
+ const checked = [];
118
+ for (const base of bases) {
119
+ let dirs;
120
+ if (s.winDir.endsWith("*")) {
121
+ const prefix = s.winDir.slice(0, -1).toLowerCase();
122
+ let entries;
123
+ try {
124
+ entries = env.readdir(base);
125
+ }
126
+ catch {
127
+ entries = [];
128
+ }
129
+ // Highest version last; the newest install that actually holds the exe wins.
130
+ dirs = entries
131
+ .filter((entry) => entry.toLowerCase().startsWith(prefix))
132
+ .sort((a, b) => a.localeCompare(b, "en", { numeric: true }))
133
+ .reverse();
134
+ if (dirs.length === 0)
135
+ checked.push(win32.join(base, s.winDir, s.winExe));
136
+ }
137
+ else {
138
+ dirs = [s.winDir];
139
+ }
140
+ for (const dir of dirs) {
141
+ const candidate = win32.join(base, dir, s.winExe);
142
+ checked.push(candidate);
143
+ if (env.exists(candidate))
144
+ return { path: candidate, checked, unsupported: null };
145
+ }
146
+ }
147
+ return { path: null, checked, unsupported: null };
148
+ }
149
+ function probeLinux(s, env) {
150
+ if (s.linuxExe === null)
151
+ return { path: null, checked: [], unsupported: NO_LINUX_EXECUTABLE };
152
+ const found = env.which(s.linuxExe);
153
+ return { path: found, checked: [`${s.linuxExe} on PATH`], unsupported: null };
154
+ }
155
+ function probe(s, env) {
156
+ switch (env.platform) {
157
+ case "darwin":
158
+ return probeDarwin(s, env);
159
+ case "win32":
160
+ return probeWindows(s, env);
161
+ case "linux":
162
+ return probeLinux(s, env);
163
+ default:
164
+ return { path: null, checked: [], unsupported: `no detection rule for platform '${env.platform}'` };
165
+ }
166
+ }
167
+ /** Detect installed slicers. An empty `slicers` list is a successful answer. */
168
+ export function detectSlicers(env = {}) {
169
+ const resolved = defaultDetectionEnv(env);
170
+ const detection = { platform: resolved.platform, slicers: [], unsupported: [] };
171
+ for (const s of SLICERS) {
172
+ const result = probe(s, resolved);
173
+ if (result.path !== null) {
174
+ detection.slicers.push({ id: s.id, name: s.name, path: result.path, multicolor: s.multicolor, platform: resolved.platform });
175
+ }
176
+ else if (result.unsupported !== null) {
177
+ detection.unsupported.push({ id: s.id, name: s.name, reason: result.unsupported });
178
+ }
179
+ }
180
+ return detection;
181
+ }
182
+ /** Registered descriptor by display name or id, case-insensitive. */
183
+ export function findSlicer(nameOrId) {
184
+ const q = nameOrId.trim().toLowerCase();
185
+ return SLICERS.find((s) => s.id === q || s.name.toLowerCase() === q);
186
+ }
187
+ const DEFAULT_LAUNCHER_TIMEOUT_MS = 5_000;
188
+ function awaitSpawned(child) {
189
+ return new Promise((resolve, reject) => {
190
+ const onSpawn = () => {
191
+ cleanup();
192
+ resolve();
193
+ };
194
+ const onError = (err) => {
195
+ cleanup();
196
+ reject(err);
197
+ };
198
+ const cleanup = () => {
199
+ child.removeListener("spawn", onSpawn);
200
+ child.removeListener("error", onError);
201
+ };
202
+ child.once("spawn", onSpawn);
203
+ child.once("error", onError);
204
+ });
205
+ }
206
+ function awaitExitBounded(child, timeoutMs) {
207
+ return new Promise((resolve) => {
208
+ const onExit = (code) => {
209
+ clearTimeout(timer);
210
+ resolve(code);
211
+ };
212
+ const timer = setTimeout(() => {
213
+ child.removeListener("exit", onExit);
214
+ resolve(null);
215
+ }, timeoutMs);
216
+ child.once("exit", onExit);
217
+ });
218
+ }
219
+ /**
220
+ * Open `file` in a registered, detected slicer. Resolves as soon as the OS
221
+ * confirms the process started (plus, on macOS, when `open` reports back);
222
+ * it never waits for a GUI to close.
223
+ */
224
+ export async function openInSlicer(file, slicerNameOrId, opts = {}) {
225
+ const descriptor = findSlicer(slicerNameOrId);
226
+ if (!descriptor) {
227
+ const registered = SLICERS.map((s) => `${s.name} (${s.id})`).join(", ");
228
+ throw new UsageError(`unknown slicer '${slicerNameOrId}'. Registered slicers: ${registered}`);
229
+ }
230
+ const detection = opts.detection ?? detectSlicers(opts.env);
231
+ const platform = detection.platform;
232
+ const detected = detection.slicers.find((s) => s.id === descriptor.id);
233
+ if (!detected) {
234
+ const unsupported = detection.unsupported.find((s) => s.id === descriptor.id);
235
+ const checked = probe(descriptor, defaultDetectionEnv({ ...opts.env, platform })).checked;
236
+ throw new CliError({
237
+ code: "not_found",
238
+ message: unsupported
239
+ ? `${descriptor.name} cannot be detected on ${platform}: ${unsupported.reason}`
240
+ : `${descriptor.name} is not installed in a known location on ${platform}`,
241
+ hint: "meshy slicer detect --output-schema v1",
242
+ recovery: { action: "run_hint", automatic: false, command: "meshy slicer detect --output-schema v1" },
243
+ details: { checked },
244
+ });
245
+ }
246
+ const absFile = resolvePath(opts.cwd ?? process.cwd(), file);
247
+ let fileStat;
248
+ try {
249
+ fileStat = statSync(absFile);
250
+ }
251
+ catch (err) {
252
+ const code = err.code;
253
+ if (code === "ENOENT" || code === "ENOTDIR") {
254
+ throw new CliError({ code: "not_found", message: `model file not found: ${absFile}` });
255
+ }
256
+ throw new CliError({ code: "local_io", message: `cannot access ${absFile}: ${err.message}`, cause: err });
257
+ }
258
+ if (!fileStat.isFile()) {
259
+ throw new CliError({ code: "not_found", message: `model path is not a regular file: ${absFile}` });
260
+ }
261
+ const ext = extname(absFile).slice(1).toLowerCase();
262
+ if (!LAUNCHABLE_EXTENSIONS.has(ext)) {
263
+ throw new UsageError(`unsupported model file extension '${ext ? `.${ext}` : "(none)"}' for ${absFile}; expected one of ${[...LAUNCHABLE_EXTENSIONS].join(", ")}`);
264
+ }
265
+ let command;
266
+ let args;
267
+ if (platform === "darwin") {
268
+ command = "open";
269
+ args = ["-a", detected.path, absFile];
270
+ }
271
+ else {
272
+ command = detected.path;
273
+ args = [absFile];
274
+ }
275
+ const spawnOptions = { detached: true, stdio: "ignore", shell: false };
276
+ const spawnImpl = opts.spawn ?? nodeSpawn;
277
+ let child;
278
+ try {
279
+ child = spawnImpl(command, args, spawnOptions);
280
+ await awaitSpawned(child);
281
+ }
282
+ catch (err) {
283
+ throw new CliError({
284
+ code: "local_io",
285
+ message: `failed to launch ${descriptor.name} (${command}): ${err instanceof Error ? err.message : String(err)}`,
286
+ cause: err,
287
+ });
288
+ }
289
+ // Late errors on an already-running child must not crash the CLI.
290
+ child.on("error", () => { });
291
+ child.unref();
292
+ let launcher = null;
293
+ if (platform === "darwin") {
294
+ const exitCode = await awaitExitBounded(child, opts.launcherTimeoutMs ?? DEFAULT_LAUNCHER_TIMEOUT_MS);
295
+ if (exitCode !== null && exitCode !== 0) {
296
+ throw new CliError({
297
+ code: "local_io",
298
+ message: `open exited with code ${exitCode}: ${descriptor.name} at ${detected.path} did not accept ${absFile}`,
299
+ details: { argv: [command, ...args], exit_code: exitCode },
300
+ });
301
+ }
302
+ launcher = { command, exit_code: exitCode };
303
+ }
304
+ return {
305
+ launch_requested: true,
306
+ slicer: detected,
307
+ file: absFile,
308
+ pid: child.pid ?? null,
309
+ argv: [command, ...args],
310
+ platform,
311
+ launcher,
312
+ };
313
+ }
314
+ //# sourceMappingURL=slicers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slicers.js","sourceRoot":"","sources":["../../src/internal/slicers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Server-Sent Events for task status.
3
+ *
4
+ * The parser follows the WHATWG EventSource algorithm: UTF-8 is decoded
5
+ * across chunk boundaries, lines end at CR, LF or CRLF, an empty line
6
+ * dispatches the event, multi-line `data:` fields are joined with "\n",
7
+ * comment lines (leading ':') are ignored, `id:` and `retry:` are recorded
8
+ * but never used to fabricate a Last-Event-ID we did not receive.
9
+ *
10
+ * Meshy's stream emits `event: message` with the full task JSON (also as the
11
+ * ~10 s keep-alive) and `event: error` with `{message, status_code}` — which
12
+ * can arrive after an HTTP 200, so it is mapped exactly like an HTTP failure.
13
+ */
14
+ import { MeshyApiError } from "../client/errors.js";
15
+ import type { TaskEndpoint } from "../client/endpoints/base.js";
16
+ import { type Task } from "../client/types.js";
17
+ import { CliError } from "./errors.js";
18
+ export declare const DEFAULT_MAX_SSE_EVENT_BYTES: number;
19
+ export interface SseEvent {
20
+ event: string;
21
+ data: string;
22
+ id: string | null;
23
+ retry: number | null;
24
+ }
25
+ export interface SseParser {
26
+ /** Feed raw bytes; returns every event completed by this chunk. */
27
+ feed(chunk: Uint8Array): SseEvent[];
28
+ /** Flush at end of stream (a final event without a trailing blank line is dispatched). */
29
+ end(): SseEvent[];
30
+ }
31
+ export declare function createSseParser(opts?: {
32
+ maxEventBytes?: number;
33
+ }): SseParser;
34
+ export type StreamEndReason = "terminal" | "timeout" | "idle_timeout" | "disconnected" | "error" | "interrupted" | "protocol";
35
+ export interface StreamOutcome {
36
+ reason: StreamEndReason;
37
+ task: Task | null;
38
+ raw: unknown;
39
+ events: number;
40
+ /** Set when the stream carried an API error event or a protocol failure. */
41
+ error: MeshyApiError | CliError | null;
42
+ elapsedMs: number;
43
+ }
44
+ export interface StreamTaskOptions {
45
+ timeoutMs: number;
46
+ idleTimeoutMs: number;
47
+ signal?: AbortSignal;
48
+ onTask?: (task: Task, raw: unknown) => void | Promise<void>;
49
+ onUnknownEvent?: (event: SseEvent) => void;
50
+ maxEventBytes?: number;
51
+ }
52
+ /**
53
+ * Open the task stream and consume it until a terminal task, an API error
54
+ * event, a deadline, a disconnect or an abort. The connection is always closed
55
+ * before this resolves.
56
+ */
57
+ export declare function streamTask(endpoint: TaskEndpoint, taskId: string, opts: StreamTaskOptions): Promise<StreamOutcome>;
58
+ //# sourceMappingURL=stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/internal/stream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAiB,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAgC,KAAK,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,eAAO,MAAM,2BAA2B,QAAc,CAAC;AAEvD,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,mEAAmE;IACnE,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,QAAQ,EAAE,CAAC;IACpC,0FAA0F;IAC1F,GAAG,IAAI,QAAQ,EAAE,CAAC;CACnB;AAED,wBAAgB,eAAe,CAAC,IAAI,GAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,SAAS,CA+GhF;AAED,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,SAAS,GAAG,cAAc,GAAG,cAAc,GAAG,OAAO,GAAG,aAAa,GAAG,UAAU,CAAC;AAE9H,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,eAAe,CAAC;IACxB,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,KAAK,EAAE,aAAa,GAAG,QAAQ,GAAG,IAAI,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,CA2HxH"}