@meshy-ai/cli 0.1.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.
- package/.env.example +14 -0
- package/LICENSE +21 -0
- package/README.md +376 -0
- package/dist/client/endpoints/analyze-printability.d.ts +5 -0
- package/dist/client/endpoints/analyze-printability.d.ts.map +1 -0
- package/dist/client/endpoints/analyze-printability.js +7 -0
- package/dist/client/endpoints/analyze-printability.js.map +1 -0
- package/dist/client/endpoints/animate.d.ts +6 -0
- package/dist/client/endpoints/animate.d.ts.map +1 -0
- package/dist/client/endpoints/animate.js +8 -0
- package/dist/client/endpoints/animate.js.map +1 -0
- package/dist/client/endpoints/balance.d.ts +9 -0
- package/dist/client/endpoints/balance.d.ts.map +1 -0
- package/dist/client/endpoints/balance.js +27 -0
- package/dist/client/endpoints/balance.js.map +1 -0
- package/dist/client/endpoints/base.d.ts +24 -0
- package/dist/client/endpoints/base.d.ts.map +1 -0
- package/dist/client/endpoints/base.js +87 -0
- package/dist/client/endpoints/base.js.map +1 -0
- package/dist/client/endpoints/convert.d.ts +5 -0
- package/dist/client/endpoints/convert.d.ts.map +1 -0
- package/dist/client/endpoints/convert.js +7 -0
- package/dist/client/endpoints/convert.js.map +1 -0
- package/dist/client/endpoints/image-to-3d.d.ts +5 -0
- package/dist/client/endpoints/image-to-3d.d.ts.map +1 -0
- package/dist/client/endpoints/image-to-3d.js +7 -0
- package/dist/client/endpoints/image-to-3d.js.map +1 -0
- package/dist/client/endpoints/image-to-image.d.ts +5 -0
- package/dist/client/endpoints/image-to-image.d.ts.map +1 -0
- package/dist/client/endpoints/image-to-image.js +7 -0
- package/dist/client/endpoints/image-to-image.js.map +1 -0
- package/dist/client/endpoints/multi-color-print.d.ts +5 -0
- package/dist/client/endpoints/multi-color-print.d.ts.map +1 -0
- package/dist/client/endpoints/multi-color-print.js +7 -0
- package/dist/client/endpoints/multi-color-print.js.map +1 -0
- package/dist/client/endpoints/multi-image-to-3d.d.ts +5 -0
- package/dist/client/endpoints/multi-image-to-3d.d.ts.map +1 -0
- package/dist/client/endpoints/multi-image-to-3d.js +7 -0
- package/dist/client/endpoints/multi-image-to-3d.js.map +1 -0
- package/dist/client/endpoints/remesh.d.ts +5 -0
- package/dist/client/endpoints/remesh.d.ts.map +1 -0
- package/dist/client/endpoints/remesh.js +7 -0
- package/dist/client/endpoints/remesh.js.map +1 -0
- package/dist/client/endpoints/repair-printability.d.ts +5 -0
- package/dist/client/endpoints/repair-printability.d.ts.map +1 -0
- package/dist/client/endpoints/repair-printability.js +7 -0
- package/dist/client/endpoints/repair-printability.js.map +1 -0
- package/dist/client/endpoints/resize.d.ts +5 -0
- package/dist/client/endpoints/resize.d.ts.map +1 -0
- package/dist/client/endpoints/resize.js +7 -0
- package/dist/client/endpoints/resize.js.map +1 -0
- package/dist/client/endpoints/retexture.d.ts +5 -0
- package/dist/client/endpoints/retexture.d.ts.map +1 -0
- package/dist/client/endpoints/retexture.js +7 -0
- package/dist/client/endpoints/retexture.js.map +1 -0
- package/dist/client/endpoints/rigging.d.ts +6 -0
- package/dist/client/endpoints/rigging.d.ts.map +1 -0
- package/dist/client/endpoints/rigging.js +8 -0
- package/dist/client/endpoints/rigging.js.map +1 -0
- package/dist/client/endpoints/text-to-3d.d.ts +6 -0
- package/dist/client/endpoints/text-to-3d.d.ts.map +1 -0
- package/dist/client/endpoints/text-to-3d.js +8 -0
- package/dist/client/endpoints/text-to-3d.js.map +1 -0
- package/dist/client/endpoints/text-to-image.d.ts +5 -0
- package/dist/client/endpoints/text-to-image.d.ts.map +1 -0
- package/dist/client/endpoints/text-to-image.js +7 -0
- package/dist/client/endpoints/text-to-image.js.map +1 -0
- package/dist/client/errors.d.ts +23 -0
- package/dist/client/errors.d.ts.map +1 -0
- package/dist/client/errors.js +82 -0
- package/dist/client/errors.js.map +1 -0
- package/dist/client/index.d.ts +48 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +147 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/types.d.ts +298 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +97 -0
- package/dist/client/types.js.map +1 -0
- package/dist/cmd/analyze-printability.d.ts +8 -0
- package/dist/cmd/analyze-printability.d.ts.map +1 -0
- package/dist/cmd/analyze-printability.js +34 -0
- package/dist/cmd/analyze-printability.js.map +1 -0
- package/dist/cmd/animate.d.ts +9 -0
- package/dist/cmd/animate.d.ts.map +1 -0
- package/dist/cmd/animate.js +51 -0
- package/dist/cmd/animate.js.map +1 -0
- package/dist/cmd/api.d.ts +9 -0
- package/dist/cmd/api.d.ts.map +1 -0
- package/dist/cmd/api.js +50 -0
- package/dist/cmd/api.js.map +1 -0
- package/dist/cmd/auth.d.ts +19 -0
- package/dist/cmd/auth.d.ts.map +1 -0
- package/dist/cmd/auth.js +583 -0
- package/dist/cmd/auth.js.map +1 -0
- package/dist/cmd/balance.d.ts +6 -0
- package/dist/cmd/balance.d.ts.map +1 -0
- package/dist/cmd/balance.js +14 -0
- package/dist/cmd/balance.js.map +1 -0
- package/dist/cmd/convert.d.ts +8 -0
- package/dist/cmd/convert.d.ts.map +1 -0
- package/dist/cmd/convert.js +40 -0
- package/dist/cmd/convert.js.map +1 -0
- package/dist/cmd/delete.d.ts +7 -0
- package/dist/cmd/delete.d.ts.map +1 -0
- package/dist/cmd/delete.js +19 -0
- package/dist/cmd/delete.js.map +1 -0
- package/dist/cmd/image-to-3d.d.ts +12 -0
- package/dist/cmd/image-to-3d.d.ts.map +1 -0
- package/dist/cmd/image-to-3d.js +97 -0
- package/dist/cmd/image-to-3d.js.map +1 -0
- package/dist/cmd/image-to-image.d.ts +5 -0
- package/dist/cmd/image-to-image.d.ts.map +1 -0
- package/dist/cmd/image-to-image.js +56 -0
- package/dist/cmd/image-to-image.js.map +1 -0
- package/dist/cmd/make.d.ts +31 -0
- package/dist/cmd/make.d.ts.map +1 -0
- package/dist/cmd/make.js +195 -0
- package/dist/cmd/make.js.map +1 -0
- package/dist/cmd/multi-color-print.d.ts +6 -0
- package/dist/cmd/multi-color-print.d.ts.map +1 -0
- package/dist/cmd/multi-color-print.js +44 -0
- package/dist/cmd/multi-color-print.js.map +1 -0
- package/dist/cmd/multi-image-to-3d.d.ts +5 -0
- package/dist/cmd/multi-image-to-3d.d.ts.map +1 -0
- package/dist/cmd/multi-image-to-3d.js +72 -0
- package/dist/cmd/multi-image-to-3d.js.map +1 -0
- package/dist/cmd/remesh.d.ts +8 -0
- package/dist/cmd/remesh.d.ts.map +1 -0
- package/dist/cmd/remesh.js +49 -0
- package/dist/cmd/remesh.js.map +1 -0
- package/dist/cmd/repair-printability.d.ts +7 -0
- package/dist/cmd/repair-printability.d.ts.map +1 -0
- package/dist/cmd/repair-printability.js +32 -0
- package/dist/cmd/repair-printability.js.map +1 -0
- package/dist/cmd/resize.d.ts +8 -0
- package/dist/cmd/resize.d.ts.map +1 -0
- package/dist/cmd/resize.js +51 -0
- package/dist/cmd/resize.js.map +1 -0
- package/dist/cmd/resources.d.ts +18 -0
- package/dist/cmd/resources.d.ts.map +1 -0
- package/dist/cmd/resources.js +59 -0
- package/dist/cmd/resources.js.map +1 -0
- package/dist/cmd/retexture.d.ts +5 -0
- package/dist/cmd/retexture.d.ts.map +1 -0
- package/dist/cmd/retexture.js +64 -0
- package/dist/cmd/retexture.js.map +1 -0
- package/dist/cmd/rigging.d.ts +6 -0
- package/dist/cmd/rigging.d.ts.map +1 -0
- package/dist/cmd/rigging.js +40 -0
- package/dist/cmd/rigging.js.map +1 -0
- package/dist/cmd/text-to-3d.d.ts +14 -0
- package/dist/cmd/text-to-3d.d.ts.map +1 -0
- package/dist/cmd/text-to-3d.js +76 -0
- package/dist/cmd/text-to-3d.js.map +1 -0
- package/dist/cmd/text-to-image.d.ts +5 -0
- package/dist/cmd/text-to-image.d.ts.map +1 -0
- package/dist/cmd/text-to-image.js +53 -0
- package/dist/cmd/text-to-image.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +46 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/config.d.ts +46 -0
- package/dist/internal/config.d.ts.map +1 -0
- package/dist/internal/config.js +94 -0
- package/dist/internal/config.js.map +1 -0
- package/dist/internal/credentials.d.ts +106 -0
- package/dist/internal/credentials.d.ts.map +1 -0
- package/dist/internal/credentials.js +297 -0
- package/dist/internal/credentials.js.map +1 -0
- package/dist/internal/device-state.d.ts +45 -0
- package/dist/internal/device-state.d.ts.map +1 -0
- package/dist/internal/device-state.js +180 -0
- package/dist/internal/device-state.js.map +1 -0
- package/dist/internal/device.d.ts +79 -0
- package/dist/internal/device.d.ts.map +1 -0
- package/dist/internal/device.js +374 -0
- package/dist/internal/device.js.map +1 -0
- package/dist/internal/download.d.ts +34 -0
- package/dist/internal/download.d.ts.map +1 -0
- package/dist/internal/download.js +283 -0
- package/dist/internal/download.js.map +1 -0
- package/dist/internal/errors.d.ts +66 -0
- package/dist/internal/errors.d.ts.map +1 -0
- package/dist/internal/errors.js +169 -0
- package/dist/internal/errors.js.map +1 -0
- package/dist/internal/file-input.d.ts +24 -0
- package/dist/internal/file-input.d.ts.map +1 -0
- package/dist/internal/file-input.js +164 -0
- package/dist/internal/file-input.js.map +1 -0
- package/dist/internal/flags.d.ts +9 -0
- package/dist/internal/flags.d.ts.map +1 -0
- package/dist/internal/flags.js +31 -0
- package/dist/internal/flags.js.map +1 -0
- package/dist/internal/global-options.d.ts +16 -0
- package/dist/internal/global-options.d.ts.map +1 -0
- package/dist/internal/global-options.js +57 -0
- package/dist/internal/global-options.js.map +1 -0
- package/dist/internal/headless.d.ts +69 -0
- package/dist/internal/headless.d.ts.map +1 -0
- package/dist/internal/headless.js +101 -0
- package/dist/internal/headless.js.map +1 -0
- package/dist/internal/image-models.d.ts +20 -0
- package/dist/internal/image-models.d.ts.map +1 -0
- package/dist/internal/image-models.js +40 -0
- package/dist/internal/image-models.js.map +1 -0
- package/dist/internal/logger.d.ts +14 -0
- package/dist/internal/logger.d.ts.map +1 -0
- package/dist/internal/logger.js +42 -0
- package/dist/internal/logger.js.map +1 -0
- package/dist/internal/make-plan.d.ts +41 -0
- package/dist/internal/make-plan.d.ts.map +1 -0
- package/dist/internal/make-plan.js +67 -0
- package/dist/internal/make-plan.js.map +1 -0
- package/dist/internal/oauth.d.ts +95 -0
- package/dist/internal/oauth.d.ts.map +1 -0
- package/dist/internal/oauth.js +365 -0
- package/dist/internal/oauth.js.map +1 -0
- package/dist/internal/output.d.ts +15 -0
- package/dist/internal/output.d.ts.map +1 -0
- package/dist/internal/output.js +66 -0
- package/dist/internal/output.js.map +1 -0
- package/dist/internal/payload.d.ts +9 -0
- package/dist/internal/payload.d.ts.map +1 -0
- package/dist/internal/payload.js +42 -0
- package/dist/internal/payload.js.map +1 -0
- package/dist/internal/poll.d.ts +17 -0
- package/dist/internal/poll.d.ts.map +1 -0
- package/dist/internal/poll.js +27 -0
- package/dist/internal/poll.js.map +1 -0
- package/dist/internal/pricing.d.ts +23 -0
- package/dist/internal/pricing.d.ts.map +1 -0
- package/dist/internal/pricing.js +24 -0
- package/dist/internal/pricing.js.map +1 -0
- package/dist/internal/report.d.ts +40 -0
- package/dist/internal/report.d.ts.map +1 -0
- package/dist/internal/report.js +48 -0
- package/dist/internal/report.js.map +1 -0
- package/dist/internal/runtime.d.ts +66 -0
- package/dist/internal/runtime.d.ts.map +1 -0
- package/dist/internal/runtime.js +160 -0
- package/dist/internal/runtime.js.map +1 -0
- package/dist/internal/task-command.d.ts +39 -0
- package/dist/internal/task-command.d.ts.map +1 -0
- package/dist/internal/task-command.js +189 -0
- package/dist/internal/task-command.js.map +1 -0
- package/dist/internal/update-notifier.d.ts +160 -0
- package/dist/internal/update-notifier.d.ts.map +1 -0
- package/dist/internal/update-notifier.js +445 -0
- package/dist/internal/update-notifier.js.map +1 -0
- package/dist/internal/user-agent.d.ts +6 -0
- package/dist/internal/user-agent.d.ts.map +1 -0
- package/dist/internal/user-agent.js +7 -0
- package/dist/internal/user-agent.js.map +1 -0
- package/dist/internal/version.d.ts +2 -0
- package/dist/internal/version.d.ts.map +1 -0
- package/dist/internal/version.js +11 -0
- package/dist/internal/version.js.map +1 -0
- package/dist/root.d.ts +13 -0
- package/dist/root.d.ts.map +1 -0
- package/dist/root.js +148 -0
- package/dist/root.js.map +1 -0
- package/package.json +65 -0
- package/skills/meshy-cli/SKILL.md +99 -0
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve user-supplied image and model inputs into something Meshy accepts.
|
|
3
|
+
*
|
|
4
|
+
* Accepted inputs (both images and 3D models):
|
|
5
|
+
* - http(s) URLs — preflighted with HEAD so unreachable sources fail fast.
|
|
6
|
+
* - Local file paths (absolute or relative to cwd) — read, MIME-sniffed,
|
|
7
|
+
* and inlined as data URIs. Users don't have to host files themselves.
|
|
8
|
+
*
|
|
9
|
+
* Base64 data URIs on the command line aren't accepted — the whole point of
|
|
10
|
+
* local-path support is to spare the user from encoding them manually.
|
|
11
|
+
*/
|
|
12
|
+
import { readFileSync, statSync } from "node:fs";
|
|
13
|
+
import { extname, isAbsolute, resolve as resolvePath } from "node:path";
|
|
14
|
+
import { UsageError } from "./errors.js";
|
|
15
|
+
import { logger } from "./logger.js";
|
|
16
|
+
/** camelCase option names that hold image inputs. */
|
|
17
|
+
export const IMAGE_FIELDS = {
|
|
18
|
+
scalar: [
|
|
19
|
+
"imageUrl", // image-to-3d
|
|
20
|
+
"imageStyleUrl", // retexture
|
|
21
|
+
],
|
|
22
|
+
list: [
|
|
23
|
+
"imageUrls", // multi-image-to-3d
|
|
24
|
+
"referenceImageUrls", // image-to-image
|
|
25
|
+
],
|
|
26
|
+
};
|
|
27
|
+
/** camelCase option names that hold 3D model inputs. */
|
|
28
|
+
export const MODEL_FIELDS = {
|
|
29
|
+
scalar: ["modelUrl"], // remesh, retexture, rigging
|
|
30
|
+
list: [],
|
|
31
|
+
};
|
|
32
|
+
export async function resolveImageFields(opts) {
|
|
33
|
+
await resolveGroup(opts, IMAGE_FIELDS, detectImageMime, "image");
|
|
34
|
+
}
|
|
35
|
+
export async function resolveModelFields(opts) {
|
|
36
|
+
await resolveGroup(opts, MODEL_FIELDS, detectModelMime, "3d model");
|
|
37
|
+
}
|
|
38
|
+
async function resolveGroup(opts, fields, detect, kind) {
|
|
39
|
+
for (const key of fields.scalar) {
|
|
40
|
+
const v = opts[key];
|
|
41
|
+
if (typeof v === "string" && v) {
|
|
42
|
+
opts[key] = await resolveOne(v, `--${toFlag(key)}`, detect, kind);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
for (const key of fields.list) {
|
|
46
|
+
const v = opts[key];
|
|
47
|
+
if (Array.isArray(v) && v.length > 0) {
|
|
48
|
+
const resolved = [];
|
|
49
|
+
for (const entry of v) {
|
|
50
|
+
if (typeof entry === "string" && entry) {
|
|
51
|
+
resolved.push(await resolveOne(entry, `--${toFlag(key)}`, detect, kind));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
opts[key] = resolved;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function toFlag(camel) {
|
|
59
|
+
return camel.replace(/([A-Z])/g, "-$1").toLowerCase();
|
|
60
|
+
}
|
|
61
|
+
async function resolveOne(input, flagLabel, detect, kind) {
|
|
62
|
+
if (input.startsWith("data:")) {
|
|
63
|
+
throw new UsageError(`${flagLabel}: data: URIs aren't accepted on the command line — pass a local file path instead`);
|
|
64
|
+
}
|
|
65
|
+
if (/^https?:\/\//i.test(input)) {
|
|
66
|
+
await preflightUrl(input, flagLabel);
|
|
67
|
+
return input;
|
|
68
|
+
}
|
|
69
|
+
return loadLocalFile(input, flagLabel, detect, kind);
|
|
70
|
+
}
|
|
71
|
+
async function preflightUrl(url, flagLabel) {
|
|
72
|
+
let resp;
|
|
73
|
+
try {
|
|
74
|
+
resp = await fetch(url, { method: "HEAD", redirect: "follow" });
|
|
75
|
+
if (resp.status === 405 || resp.status === 501) {
|
|
76
|
+
const controller = new AbortController();
|
|
77
|
+
resp = await fetch(url, { method: "GET", signal: controller.signal, redirect: "follow" });
|
|
78
|
+
controller.abort();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
83
|
+
throw new UsageError(`${flagLabel}: cannot reach ${url} (${msg})`);
|
|
84
|
+
}
|
|
85
|
+
if (!resp.ok) {
|
|
86
|
+
throw new UsageError(`${flagLabel}: ${url} returned ${resp.status} ${resp.statusText}`);
|
|
87
|
+
}
|
|
88
|
+
logger.debug(`${flagLabel} preflight OK: ${url} (${resp.status})`);
|
|
89
|
+
}
|
|
90
|
+
function loadLocalFile(input, flagLabel, detect, kind) {
|
|
91
|
+
const absPath = isAbsolute(input) ? input : resolvePath(process.cwd(), input);
|
|
92
|
+
let stat;
|
|
93
|
+
try {
|
|
94
|
+
stat = statSync(absPath);
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
throw new UsageError(`${flagLabel}: file not found: ${input}`);
|
|
98
|
+
}
|
|
99
|
+
if (!stat.isFile()) {
|
|
100
|
+
throw new UsageError(`${flagLabel}: not a regular file: ${input}`);
|
|
101
|
+
}
|
|
102
|
+
const buffer = readFileSync(absPath);
|
|
103
|
+
const mime = detect(buffer, absPath);
|
|
104
|
+
if (!mime) {
|
|
105
|
+
throw new UsageError(`${flagLabel}: could not detect ${kind} MIME type for ${absPath}`);
|
|
106
|
+
}
|
|
107
|
+
logger.debug(`${flagLabel} inlined ${absPath} as ${mime} data URI (${buffer.length} bytes)`);
|
|
108
|
+
return `data:${mime};base64,${buffer.toString("base64")}`;
|
|
109
|
+
}
|
|
110
|
+
function detectImageMime(buffer, path) {
|
|
111
|
+
if (buffer.length >= 12) {
|
|
112
|
+
if (buffer[0] === 0xff && buffer[1] === 0xd8 && buffer[2] === 0xff)
|
|
113
|
+
return "image/jpeg";
|
|
114
|
+
if (buffer[0] === 0x89 &&
|
|
115
|
+
buffer[1] === 0x50 &&
|
|
116
|
+
buffer[2] === 0x4e &&
|
|
117
|
+
buffer[3] === 0x47)
|
|
118
|
+
return "image/png";
|
|
119
|
+
if (buffer[0] === 0x47 && buffer[1] === 0x49 && buffer[2] === 0x46)
|
|
120
|
+
return "image/gif";
|
|
121
|
+
if (buffer.subarray(0, 4).toString("ascii") === "RIFF" &&
|
|
122
|
+
buffer.subarray(8, 12).toString("ascii") === "WEBP")
|
|
123
|
+
return "image/webp";
|
|
124
|
+
if (buffer[0] === 0x42 && buffer[1] === 0x4d)
|
|
125
|
+
return "image/bmp";
|
|
126
|
+
}
|
|
127
|
+
const ext = extname(path).slice(1).toLowerCase();
|
|
128
|
+
const map = {
|
|
129
|
+
jpg: "image/jpeg",
|
|
130
|
+
jpeg: "image/jpeg",
|
|
131
|
+
png: "image/png",
|
|
132
|
+
webp: "image/webp",
|
|
133
|
+
gif: "image/gif",
|
|
134
|
+
bmp: "image/bmp",
|
|
135
|
+
};
|
|
136
|
+
return map[ext] ?? "";
|
|
137
|
+
}
|
|
138
|
+
function detectModelMime(buffer, path) {
|
|
139
|
+
// GLB: magic "glTF" at offset 0
|
|
140
|
+
if (buffer.length >= 4 &&
|
|
141
|
+
buffer[0] === 0x67 &&
|
|
142
|
+
buffer[1] === 0x6c &&
|
|
143
|
+
buffer[2] === 0x54 &&
|
|
144
|
+
buffer[3] === 0x46) {
|
|
145
|
+
return "model/gltf-binary";
|
|
146
|
+
}
|
|
147
|
+
// FBX binary: "Kaydara FBX Binary" ASCII signature at offset 0
|
|
148
|
+
if (buffer.length >= 18 && buffer.subarray(0, 18).toString("ascii") === "Kaydara FBX Binary") {
|
|
149
|
+
return "application/octet-stream";
|
|
150
|
+
}
|
|
151
|
+
// Fall back to extension for text formats (obj, gltf, ascii stl) and usdz/3mf.
|
|
152
|
+
const ext = extname(path).slice(1).toLowerCase();
|
|
153
|
+
const map = {
|
|
154
|
+
glb: "model/gltf-binary",
|
|
155
|
+
gltf: "model/gltf+json",
|
|
156
|
+
obj: "model/obj",
|
|
157
|
+
fbx: "application/octet-stream",
|
|
158
|
+
stl: "model/stl",
|
|
159
|
+
usdz: "model/vnd.usdz+zip",
|
|
160
|
+
"3mf": "model/3mf",
|
|
161
|
+
};
|
|
162
|
+
return map[ext] ?? "";
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=file-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-input.js","sourceRoot":"","sources":["../../src/internal/file-input.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Small reusable Commander `<arg>` parsers.
|
|
3
|
+
*/
|
|
4
|
+
export declare function parseBool(raw: string): boolean;
|
|
5
|
+
export declare function parseInt10(raw: string): number;
|
|
6
|
+
export declare function parseNumber(raw: string): number;
|
|
7
|
+
export declare function parseCsv(raw: string): string[];
|
|
8
|
+
export declare function collect(raw: string, prev?: string[]): string[];
|
|
9
|
+
//# sourceMappingURL=flags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flags.d.ts","sourceRoot":"","sources":["../../src/internal/flags.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAK9C;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAI9C;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAI/C;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAE9C;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE,CAElE"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Small reusable Commander `<arg>` parsers.
|
|
3
|
+
*/
|
|
4
|
+
import { UsageError } from "./errors.js";
|
|
5
|
+
export function parseBool(raw) {
|
|
6
|
+
const v = raw.toLowerCase();
|
|
7
|
+
if (v === "true" || v === "1" || v === "yes")
|
|
8
|
+
return true;
|
|
9
|
+
if (v === "false" || v === "0" || v === "no")
|
|
10
|
+
return false;
|
|
11
|
+
throw new UsageError(`expected true/false, got '${raw}'`);
|
|
12
|
+
}
|
|
13
|
+
export function parseInt10(raw) {
|
|
14
|
+
const n = Number.parseInt(raw, 10);
|
|
15
|
+
if (!Number.isFinite(n))
|
|
16
|
+
throw new UsageError(`expected integer, got '${raw}'`);
|
|
17
|
+
return n;
|
|
18
|
+
}
|
|
19
|
+
export function parseNumber(raw) {
|
|
20
|
+
const n = Number(raw);
|
|
21
|
+
if (!Number.isFinite(n))
|
|
22
|
+
throw new UsageError(`expected number, got '${raw}'`);
|
|
23
|
+
return n;
|
|
24
|
+
}
|
|
25
|
+
export function parseCsv(raw) {
|
|
26
|
+
return raw.split(",").map((s) => s.trim()).filter(Boolean);
|
|
27
|
+
}
|
|
28
|
+
export function collect(raw, prev = []) {
|
|
29
|
+
return [...prev, raw];
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=flags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flags.js","sourceRoot":"","sources":["../../src/internal/flags.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,MAAM,CAAC,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAC5B,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAC1D,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC3D,MAAM,IAAI,UAAU,CAAC,6BAA6B,GAAG,GAAG,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,0BAA0B,GAAG,GAAG,CAAC,CAAC;IAChF,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,yBAAyB,GAAG,GAAG,CAAC,CAAC;IAC/E,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAW,EAAE,OAAiB,EAAE;IACtD,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global flags that should be accepted at every command level so they work
|
|
3
|
+
* regardless of position in argv (e.g. `meshy-cli balance --format pretty`
|
|
4
|
+
* as well as `meshy-cli --format pretty balance`).
|
|
5
|
+
*
|
|
6
|
+
* We declare them once on the root with visible help + defaults, and mirror
|
|
7
|
+
* them (hidden, no defaults) onto every descendant command. `optsWithGlobals`
|
|
8
|
+
* then merges any set value — a flag on the innermost command wins, and
|
|
9
|
+
* unset leaf options fall through to the parent's value or its default.
|
|
10
|
+
*/
|
|
11
|
+
import { Command } from "commander";
|
|
12
|
+
/** Register the visible, default-carrying versions on the root command. */
|
|
13
|
+
export declare function registerRootGlobalOptions(root: Command): void;
|
|
14
|
+
/** Mirror the same flags onto every descendant, hidden from help. */
|
|
15
|
+
export declare function mirrorGlobalOptionsToDescendants(root: Command): void;
|
|
16
|
+
//# sourceMappingURL=global-options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"global-options.d.ts","sourceRoot":"","sources":["../../src/internal/global-options.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AA0B5C,2EAA2E;AAC3E,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAO7D;AAED,qEAAqE;AACrE,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CASpE"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global flags that should be accepted at every command level so they work
|
|
3
|
+
* regardless of position in argv (e.g. `meshy-cli balance --format pretty`
|
|
4
|
+
* as well as `meshy-cli --format pretty balance`).
|
|
5
|
+
*
|
|
6
|
+
* We declare them once on the root with visible help + defaults, and mirror
|
|
7
|
+
* them (hidden, no defaults) onto every descendant command. `optsWithGlobals`
|
|
8
|
+
* then merges any set value — a flag on the innermost command wins, and
|
|
9
|
+
* unset leaf options fall through to the parent's value or its default.
|
|
10
|
+
*/
|
|
11
|
+
import { Option } from "commander";
|
|
12
|
+
const FACTORIES = [
|
|
13
|
+
() => new Option("--api-key <key>", "Meshy API key (overrides MESHY_API_KEY)"),
|
|
14
|
+
() => new Option("--base-url-v1 <url>", "override v1 base URL"),
|
|
15
|
+
() => new Option("--base-url-v2 <url>", "override v2 base URL"),
|
|
16
|
+
() => new Option("--format <fmt>", "output format").choices(["json", "pretty", "ndjson"]),
|
|
17
|
+
() => new Option("--json", "output as JSON (alias for --format json)"),
|
|
18
|
+
() => new Option("-o, --output <path>", "download artifacts + write meta.json; switches stdout to a status report"),
|
|
19
|
+
() => new Option("-v, --verbose", "debug logging"),
|
|
20
|
+
() => new Option("--log-level <level>", "log level").choices([
|
|
21
|
+
"debug",
|
|
22
|
+
"info",
|
|
23
|
+
"warn",
|
|
24
|
+
"error",
|
|
25
|
+
"silent",
|
|
26
|
+
]),
|
|
27
|
+
];
|
|
28
|
+
/** Register the visible, default-carrying versions on the root command. */
|
|
29
|
+
export function registerRootGlobalOptions(root) {
|
|
30
|
+
for (const factory of FACTORIES) {
|
|
31
|
+
const opt = factory();
|
|
32
|
+
if (opt.long === "--format")
|
|
33
|
+
opt.default("json");
|
|
34
|
+
if (opt.long === "--verbose")
|
|
35
|
+
opt.default(false);
|
|
36
|
+
root.addOption(opt);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/** Mirror the same flags onto every descendant, hidden from help. */
|
|
40
|
+
export function mirrorGlobalOptionsToDescendants(root) {
|
|
41
|
+
walk(root, (cmd) => {
|
|
42
|
+
if (cmd === root)
|
|
43
|
+
return;
|
|
44
|
+
for (const factory of FACTORIES) {
|
|
45
|
+
const opt = factory().hideHelp();
|
|
46
|
+
if (cmd.options.some((existing) => existing.long === opt.long))
|
|
47
|
+
continue;
|
|
48
|
+
cmd.addOption(opt);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
function walk(cmd, visit) {
|
|
53
|
+
visit(cmd);
|
|
54
|
+
for (const sub of cmd.commands)
|
|
55
|
+
walk(sub, visit);
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=global-options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"global-options.js","sourceRoot":"","sources":["../../src/internal/global-options.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAW,MAAM,EAAE,MAAM,WAAW,CAAC;AAI5C,MAAM,SAAS,GAAoB;IACjC,GAAG,EAAE,CAAC,IAAI,MAAM,CAAC,iBAAiB,EAAE,yCAAyC,CAAC;IAC9E,GAAG,EAAE,CAAC,IAAI,MAAM,CAAC,qBAAqB,EAAE,sBAAsB,CAAC;IAC/D,GAAG,EAAE,CAAC,IAAI,MAAM,CAAC,qBAAqB,EAAE,sBAAsB,CAAC;IAC/D,GAAG,EAAE,CAAC,IAAI,MAAM,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACzF,GAAG,EAAE,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,0CAA0C,CAAC;IACtE,GAAG,EAAE,CACH,IAAI,MAAM,CACR,qBAAqB,EACrB,0EAA0E,CAC3E;IACH,GAAG,EAAE,CAAC,IAAI,MAAM,CAAC,eAAe,EAAE,eAAe,CAAC;IAClD,GAAG,EAAE,CACH,IAAI,MAAM,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC;QACrD,OAAO;QACP,MAAM;QACN,MAAM;QACN,OAAO;QACP,QAAQ;KACT,CAAC;CACL,CAAC;AAEF,2EAA2E;AAC3E,MAAM,UAAU,yBAAyB,CAAC,IAAa;IACrD,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;QACtB,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU;YAAE,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW;YAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,gCAAgC,CAAC,IAAa;IAC5D,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;QACjB,IAAI,GAAG,KAAK,IAAI;YAAE,OAAO;QACzB,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;YACjC,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAS;YACzE,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,IAAI,CAAC,GAAY,EAAE,KAA2B;IACrD,KAAK,CAAC,GAAG,CAAC,CAAC;IACX,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,QAAQ;QAAE,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Headless environment detection and login mode resolution.
|
|
3
|
+
*
|
|
4
|
+
* detectHeadless() returns true when the process is running in an environment
|
|
5
|
+
* where a browser cannot be opened (CI, SSH, container, no display server).
|
|
6
|
+
*
|
|
7
|
+
* resolveLoginMode() maps explicit flags + environment signals to one of the
|
|
8
|
+
* four login modes: "loopback", "manual", "device", or "no-wait".
|
|
9
|
+
*/
|
|
10
|
+
export type LoginMode = "loopback" | "manual" | "device" | "no-wait" | "resume";
|
|
11
|
+
export interface HeadlessEnv {
|
|
12
|
+
CI?: string;
|
|
13
|
+
SSH_CONNECTION?: string;
|
|
14
|
+
SSH_TTY?: string;
|
|
15
|
+
KUBERNETES_SERVICE_HOST?: string;
|
|
16
|
+
DISPLAY?: string;
|
|
17
|
+
WAYLAND_DISPLAY?: string;
|
|
18
|
+
MESHY_CLI_NO_BROWSER?: string;
|
|
19
|
+
[key: string]: string | undefined;
|
|
20
|
+
}
|
|
21
|
+
export interface TtyState {
|
|
22
|
+
stderrIsTTY: boolean;
|
|
23
|
+
stdinIsTTY: boolean;
|
|
24
|
+
stdoutIsTTY: boolean;
|
|
25
|
+
platform: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Detect whether the current environment is headless (no browser available).
|
|
29
|
+
*
|
|
30
|
+
* Strong signals (any one → headless):
|
|
31
|
+
* - CI env var set
|
|
32
|
+
* - SSH_CONNECTION or SSH_TTY set
|
|
33
|
+
* - /.dockerenv or /run/.containerenv exists
|
|
34
|
+
* - KUBERNETES_SERVICE_HOST set
|
|
35
|
+
* - Linux with no DISPLAY and no WAYLAND_DISPLAY
|
|
36
|
+
* - MESHY_CLI_NO_BROWSER=1 (explicit opt-out)
|
|
37
|
+
*
|
|
38
|
+
* Weak signal (both must be absent for headless):
|
|
39
|
+
* - !stderr.isTTY && !stdin.isTTY → probably headless
|
|
40
|
+
*
|
|
41
|
+
* NOTE: !stdout.isTTY alone is NOT used — piping JSON to jq on a desktop
|
|
42
|
+
* must stay loopback.
|
|
43
|
+
*
|
|
44
|
+
* MESHY_CLI_FORCE_GUI=1 overrides all signals and forces GUI (non-headless)
|
|
45
|
+
* mode. Used in tests that need to simulate a GUI environment.
|
|
46
|
+
*/
|
|
47
|
+
export declare function detectHeadless(env?: HeadlessEnv, tty?: TtyState): boolean;
|
|
48
|
+
export interface ResolveModeOpts {
|
|
49
|
+
manual?: boolean;
|
|
50
|
+
device?: boolean;
|
|
51
|
+
noWait?: boolean;
|
|
52
|
+
deviceFlow?: string;
|
|
53
|
+
deviceCode?: string;
|
|
54
|
+
env?: HeadlessEnv;
|
|
55
|
+
tty?: TtyState;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Resolve the login mode from explicit flags and environment signals.
|
|
59
|
+
*
|
|
60
|
+
* Priority (highest to lowest):
|
|
61
|
+
* 1. --device-flow <id> or --device-code <code> → "resume"
|
|
62
|
+
* 2. --no-wait → "no-wait"
|
|
63
|
+
* 3. --device → "device"
|
|
64
|
+
* 4. --manual → "manual"
|
|
65
|
+
* 5. detectHeadless() → "device"
|
|
66
|
+
* 6. default → "loopback"
|
|
67
|
+
*/
|
|
68
|
+
export declare function resolveLoginMode(opts: ResolveModeOpts): LoginMode;
|
|
69
|
+
//# sourceMappingURL=headless.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headless.d.ts","sourceRoot":"","sources":["../../src/internal/headless.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEhF,MAAM,WAAW,WAAW;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,MAAM,WAAW,QAAQ;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,cAAc,CAC5B,GAAG,GAAE,WAAyB,EAC9B,GAAG,GAAE,QAKJ,GACA,OAAO,CAiCT;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,WAAW,CAAC;IAClB,GAAG,CAAC,EAAE,QAAQ,CAAC;CAChB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,GAAG,SAAS,CAqBjE"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Headless environment detection and login mode resolution.
|
|
3
|
+
*
|
|
4
|
+
* detectHeadless() returns true when the process is running in an environment
|
|
5
|
+
* where a browser cannot be opened (CI, SSH, container, no display server).
|
|
6
|
+
*
|
|
7
|
+
* resolveLoginMode() maps explicit flags + environment signals to one of the
|
|
8
|
+
* four login modes: "loopback", "manual", "device", or "no-wait".
|
|
9
|
+
*/
|
|
10
|
+
import { existsSync } from "node:fs";
|
|
11
|
+
/**
|
|
12
|
+
* Detect whether the current environment is headless (no browser available).
|
|
13
|
+
*
|
|
14
|
+
* Strong signals (any one → headless):
|
|
15
|
+
* - CI env var set
|
|
16
|
+
* - SSH_CONNECTION or SSH_TTY set
|
|
17
|
+
* - /.dockerenv or /run/.containerenv exists
|
|
18
|
+
* - KUBERNETES_SERVICE_HOST set
|
|
19
|
+
* - Linux with no DISPLAY and no WAYLAND_DISPLAY
|
|
20
|
+
* - MESHY_CLI_NO_BROWSER=1 (explicit opt-out)
|
|
21
|
+
*
|
|
22
|
+
* Weak signal (both must be absent for headless):
|
|
23
|
+
* - !stderr.isTTY && !stdin.isTTY → probably headless
|
|
24
|
+
*
|
|
25
|
+
* NOTE: !stdout.isTTY alone is NOT used — piping JSON to jq on a desktop
|
|
26
|
+
* must stay loopback.
|
|
27
|
+
*
|
|
28
|
+
* MESHY_CLI_FORCE_GUI=1 overrides all signals and forces GUI (non-headless)
|
|
29
|
+
* mode. Used in tests that need to simulate a GUI environment.
|
|
30
|
+
*/
|
|
31
|
+
export function detectHeadless(env = process.env, tty = {
|
|
32
|
+
stderrIsTTY: Boolean(process.stderr.isTTY),
|
|
33
|
+
stdinIsTTY: Boolean(process.stdin.isTTY),
|
|
34
|
+
stdoutIsTTY: Boolean(process.stdout.isTTY),
|
|
35
|
+
platform: process.platform,
|
|
36
|
+
}) {
|
|
37
|
+
// Force GUI mode (test escape hatch).
|
|
38
|
+
if (env["MESHY_CLI_FORCE_GUI"])
|
|
39
|
+
return false;
|
|
40
|
+
// Explicit opt-out.
|
|
41
|
+
if (env["MESHY_CLI_NO_BROWSER"])
|
|
42
|
+
return true;
|
|
43
|
+
// CI environment.
|
|
44
|
+
if (env["CI"])
|
|
45
|
+
return true;
|
|
46
|
+
// SSH session.
|
|
47
|
+
if (env["SSH_CONNECTION"] || env["SSH_TTY"])
|
|
48
|
+
return true;
|
|
49
|
+
// Container environments.
|
|
50
|
+
if (existsSync("/.dockerenv") || existsSync("/run/.containerenv"))
|
|
51
|
+
return true;
|
|
52
|
+
// Kubernetes.
|
|
53
|
+
if (env["KUBERNETES_SERVICE_HOST"])
|
|
54
|
+
return true;
|
|
55
|
+
// Linux with no display server.
|
|
56
|
+
if (tty.platform === "linux" &&
|
|
57
|
+
!env["DISPLAY"] &&
|
|
58
|
+
!env["WAYLAND_DISPLAY"]) {
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
// Weak signal: no stderr TTY and no stdin TTY → probably headless.
|
|
62
|
+
// (stdout piped to jq on a desktop must NOT trigger this.)
|
|
63
|
+
if (!tty.stderrIsTTY && !tty.stdinIsTTY)
|
|
64
|
+
return true;
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Resolve the login mode from explicit flags and environment signals.
|
|
69
|
+
*
|
|
70
|
+
* Priority (highest to lowest):
|
|
71
|
+
* 1. --device-flow <id> or --device-code <code> → "resume"
|
|
72
|
+
* 2. --no-wait → "no-wait"
|
|
73
|
+
* 3. --device → "device"
|
|
74
|
+
* 4. --manual → "manual"
|
|
75
|
+
* 5. detectHeadless() → "device"
|
|
76
|
+
* 6. default → "loopback"
|
|
77
|
+
*/
|
|
78
|
+
export function resolveLoginMode(opts) {
|
|
79
|
+
const env = opts.env ?? process.env;
|
|
80
|
+
const tty = opts.tty ?? {
|
|
81
|
+
stderrIsTTY: Boolean(process.stderr.isTTY),
|
|
82
|
+
stdinIsTTY: Boolean(process.stdin.isTTY),
|
|
83
|
+
stdoutIsTTY: Boolean(process.stdout.isTTY),
|
|
84
|
+
platform: process.platform,
|
|
85
|
+
};
|
|
86
|
+
// Explicit resume flags win first.
|
|
87
|
+
if (opts.deviceFlow || opts.deviceCode)
|
|
88
|
+
return "resume";
|
|
89
|
+
// Explicit mode flags.
|
|
90
|
+
if (opts.noWait)
|
|
91
|
+
return "no-wait";
|
|
92
|
+
if (opts.device)
|
|
93
|
+
return "device";
|
|
94
|
+
if (opts.manual)
|
|
95
|
+
return "manual";
|
|
96
|
+
// Auto-detect.
|
|
97
|
+
if (detectHeadless(env, tty))
|
|
98
|
+
return "device";
|
|
99
|
+
return "loopback";
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=headless.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headless.js","sourceRoot":"","sources":["../../src/internal/headless.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAsBrC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAmB,OAAO,CAAC,GAAG,EAC9B,MAAgB;IACd,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IAC1C,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;IACxC,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IAC1C,QAAQ,EAAE,OAAO,CAAC,QAAQ;CAC3B;IAED,sCAAsC;IACtC,IAAI,GAAG,CAAC,qBAAqB,CAAC;QAAE,OAAO,KAAK,CAAC;IAE7C,oBAAoB;IACpB,IAAI,GAAG,CAAC,sBAAsB,CAAC;QAAE,OAAO,IAAI,CAAC;IAE7C,kBAAkB;IAClB,IAAI,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAE3B,eAAe;IACf,IAAI,GAAG,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzD,0BAA0B;IAC1B,IAAI,UAAU,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,oBAAoB,CAAC;QAAE,OAAO,IAAI,CAAC;IAE/E,cAAc;IACd,IAAI,GAAG,CAAC,yBAAyB,CAAC;QAAE,OAAO,IAAI,CAAC;IAEhD,gCAAgC;IAChC,IACE,GAAG,CAAC,QAAQ,KAAK,OAAO;QACxB,CAAC,GAAG,CAAC,SAAS,CAAC;QACf,CAAC,GAAG,CAAC,iBAAiB,CAAC,EACvB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mEAAmE;IACnE,2DAA2D;IAC3D,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,GAAG,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAErD,OAAO,KAAK,CAAC;AACf,CAAC;AAYD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAqB;IACpD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI;QACtB,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;QAC1C,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;QACxC,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;QAC1C,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC;IAEF,mCAAmC;IACnC,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU;QAAE,OAAO,QAAQ,CAAC;IAExD,uBAAuB;IACvB,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAClC,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC;IACjC,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC;IAEjC,eAAe;IACf,IAAI,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC;QAAE,OAAO,QAAQ,CAAC;IAE9C,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared model/aspect-ratio table for the 2D image commands, so text-to-image
|
|
3
|
+
* and image-to-image can't drift apart as Meshy ships new models.
|
|
4
|
+
*/
|
|
5
|
+
export declare const IMAGE_MODELS: readonly ["gpt-image-2", "nano-banana-pro", "nano-banana-2", "nano-banana-2-lite", "nano-banana"];
|
|
6
|
+
export declare const DEFAULT_IMAGE_MODEL = "gpt-image-2";
|
|
7
|
+
export declare const IMAGE_MODEL_HELP: string;
|
|
8
|
+
export declare const ASPECT_RATIOS: readonly ["1:1", "16:9", "9:16", "4:3", "3:4", "3:2", "2:3"];
|
|
9
|
+
export declare const ASPECT_RATIO_HELP: string;
|
|
10
|
+
/**
|
|
11
|
+
* Cross-validate model × aspect-ratio × multi-view before any credits are
|
|
12
|
+
* spent; the API's own 400 is less specific. When the model is unknown at
|
|
13
|
+
* parse time (driven via --data), the ratio check is left to the server.
|
|
14
|
+
*/
|
|
15
|
+
export declare function checkImageCombo(opts: {
|
|
16
|
+
aiModel?: string;
|
|
17
|
+
aspectRatio?: string;
|
|
18
|
+
generateMultiView?: boolean;
|
|
19
|
+
}): void;
|
|
20
|
+
//# sourceMappingURL=image-models.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-models.d.ts","sourceRoot":"","sources":["../../src/internal/image-models.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,eAAO,MAAM,YAAY,mGAMf,CAAC;AAEX,eAAO,MAAM,mBAAmB,gBAAgB,CAAC;AAEjD,eAAO,MAAM,gBAAgB,QAEoC,CAAC;AAElE,eAAO,MAAM,aAAa,8DAA+D,CAAC;AAE1F,eAAO,MAAM,iBAAiB,QAEmB,CAAC;AAKlD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,GAAG,IAAI,CAcP"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared model/aspect-ratio table for the 2D image commands, so text-to-image
|
|
3
|
+
* and image-to-image can't drift apart as Meshy ships new models.
|
|
4
|
+
*/
|
|
5
|
+
import { UsageError } from "./errors.js";
|
|
6
|
+
export const IMAGE_MODELS = [
|
|
7
|
+
"gpt-image-2",
|
|
8
|
+
"nano-banana-pro",
|
|
9
|
+
"nano-banana-2",
|
|
10
|
+
"nano-banana-2-lite",
|
|
11
|
+
"nano-banana",
|
|
12
|
+
];
|
|
13
|
+
export const DEFAULT_IMAGE_MODEL = "gpt-image-2";
|
|
14
|
+
export const IMAGE_MODEL_HELP = "gpt-image-2 (default, best; ratios 1:1|3:2|2:3) | nano-banana-pro | nano-banana-2 | " +
|
|
15
|
+
"nano-banana-2-lite (fastest, cheapest) | nano-banana (legacy)";
|
|
16
|
+
export const ASPECT_RATIOS = ["1:1", "16:9", "9:16", "4:3", "3:4", "3:2", "2:3"];
|
|
17
|
+
export const ASPECT_RATIO_HELP = "default: 1:1. nano-banana*: 1:1|16:9|9:16|4:3|3:4. gpt-image-2: 1:1|3:2|2:3. " +
|
|
18
|
+
"Mutually exclusive with --generate-multi-view";
|
|
19
|
+
const GPT_IMAGE_2_RATIOS = new Set(["1:1", "3:2", "2:3"]);
|
|
20
|
+
const NANO_BANANA_RATIOS = new Set(["1:1", "16:9", "9:16", "4:3", "3:4"]);
|
|
21
|
+
/**
|
|
22
|
+
* Cross-validate model × aspect-ratio × multi-view before any credits are
|
|
23
|
+
* spent; the API's own 400 is less specific. When the model is unknown at
|
|
24
|
+
* parse time (driven via --data), the ratio check is left to the server.
|
|
25
|
+
*/
|
|
26
|
+
export function checkImageCombo(opts) {
|
|
27
|
+
if (opts.generateMultiView === true && opts.aspectRatio) {
|
|
28
|
+
throw new UsageError("--generate-multi-view true is mutually exclusive with --aspect-ratio");
|
|
29
|
+
}
|
|
30
|
+
const ratio = opts.aspectRatio;
|
|
31
|
+
if (!ratio || !opts.aiModel)
|
|
32
|
+
return;
|
|
33
|
+
const supported = opts.aiModel === "gpt-image-2" ? GPT_IMAGE_2_RATIOS : NANO_BANANA_RATIOS;
|
|
34
|
+
if (!supported.has(ratio)) {
|
|
35
|
+
throw new UsageError(opts.aiModel === "gpt-image-2"
|
|
36
|
+
? `--aspect-ratio ${ratio} is not supported by gpt-image-2 (use 1:1, 3:2, or 2:3)`
|
|
37
|
+
: `--aspect-ratio ${ratio} is only supported by gpt-image-2`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=image-models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-models.js","sourceRoot":"","sources":["../../src/internal/image-models.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,aAAa;IACb,iBAAiB;IACjB,eAAe;IACf,oBAAoB;IACpB,aAAa;CACL,CAAC;AAEX,MAAM,CAAC,MAAM,mBAAmB,GAAG,aAAa,CAAC;AAEjD,MAAM,CAAC,MAAM,gBAAgB,GAC3B,sFAAsF;IACtF,+DAA+D,CAAC;AAElE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAU,CAAC;AAE1F,MAAM,CAAC,MAAM,iBAAiB,GAC5B,+EAA+E;IAC/E,+CAA+C,CAAC;AAElD,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AAC1D,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AAE1E;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,IAI/B;IACC,IAAI,IAAI,CAAC,iBAAiB,KAAK,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACxD,MAAM,IAAI,UAAU,CAAC,sEAAsE,CAAC,CAAC;IAC/F,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;IAC/B,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO;QAAE,OAAO;IACpC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,KAAK,aAAa,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,CAAC;IAC3F,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,UAAU,CAClB,IAAI,CAAC,OAAO,KAAK,aAAa;YAC5B,CAAC,CAAC,kBAAkB,KAAK,yDAAyD;YAClF,CAAC,CAAC,kBAAkB,KAAK,mCAAmC,CAC/D,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Leveled logger → stderr. stdout is reserved for command output
|
|
3
|
+
* so `meshy-cli ... | jq ...` stays clean.
|
|
4
|
+
*/
|
|
5
|
+
export type LogLevel = "debug" | "info" | "warn" | "error" | "silent";
|
|
6
|
+
export declare function setLogLevel(level: LogLevel): void;
|
|
7
|
+
export declare function getLogLevel(): LogLevel;
|
|
8
|
+
export declare const logger: {
|
|
9
|
+
debug: (msg: string, extra?: unknown) => void;
|
|
10
|
+
info: (msg: string, extra?: unknown) => void;
|
|
11
|
+
warn: (msg: string, extra?: unknown) => void;
|
|
12
|
+
error: (msg: string, extra?: unknown) => void;
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/internal/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAYtE,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAEjD;AAED,wBAAgB,WAAW,IAAI,QAAQ,CAEtC;AAoBD,eAAO,MAAM,MAAM;iBACJ,MAAM,UAAU,OAAO;gBACxB,MAAM,UAAU,OAAO;gBACvB,MAAM,UAAU,OAAO;iBACtB,MAAM,UAAU,OAAO;CACrC,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Leveled logger → stderr. stdout is reserved for command output
|
|
3
|
+
* so `meshy-cli ... | jq ...` stays clean.
|
|
4
|
+
*/
|
|
5
|
+
const LEVEL_ORDER = {
|
|
6
|
+
debug: 10,
|
|
7
|
+
info: 20,
|
|
8
|
+
warn: 30,
|
|
9
|
+
error: 40,
|
|
10
|
+
silent: 99,
|
|
11
|
+
};
|
|
12
|
+
let currentLevel = "warn";
|
|
13
|
+
export function setLogLevel(level) {
|
|
14
|
+
currentLevel = level;
|
|
15
|
+
}
|
|
16
|
+
export function getLogLevel() {
|
|
17
|
+
return currentLevel;
|
|
18
|
+
}
|
|
19
|
+
function write(level, msg, extra) {
|
|
20
|
+
if (LEVEL_ORDER[level] < LEVEL_ORDER[currentLevel])
|
|
21
|
+
return;
|
|
22
|
+
const time = new Date().toISOString();
|
|
23
|
+
const line = extra === undefined
|
|
24
|
+
? `[${time}] ${level.toUpperCase()} ${msg}\n`
|
|
25
|
+
: `[${time}] ${level.toUpperCase()} ${msg} ${safeJson(extra)}\n`;
|
|
26
|
+
process.stderr.write(line);
|
|
27
|
+
}
|
|
28
|
+
function safeJson(v) {
|
|
29
|
+
try {
|
|
30
|
+
return JSON.stringify(v);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return String(v);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export const logger = {
|
|
37
|
+
debug: (msg, extra) => write("debug", msg, extra),
|
|
38
|
+
info: (msg, extra) => write("info", msg, extra),
|
|
39
|
+
warn: (msg, extra) => write("warn", msg, extra),
|
|
40
|
+
error: (msg, extra) => write("error", msg, extra),
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/internal/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,GAA6B;IAC5C,KAAK,EAAE,EAAE;IACT,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,KAAK,EAAE,EAAE;IACT,MAAM,EAAE,EAAE;CACX,CAAC;AAEF,IAAI,YAAY,GAAa,MAAM,CAAC;AAEpC,MAAM,UAAU,WAAW,CAAC,KAAe;IACzC,YAAY,GAAG,KAAK,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,KAAK,CAAC,KAAe,EAAE,GAAW,EAAE,KAAe;IAC1D,IAAI,WAAW,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,YAAY,CAAC;QAAE,OAAO;IAC3D,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACtC,MAAM,IAAI,GACR,KAAK,KAAK,SAAS;QACjB,CAAC,CAAC,IAAI,IAAI,KAAK,KAAK,CAAC,WAAW,EAAE,IAAI,GAAG,IAAI;QAC7C,CAAC,CAAC,IAAI,IAAI,KAAK,KAAK,CAAC,WAAW,EAAE,IAAI,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;IACrE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,QAAQ,CAAC,CAAU;IAC1B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,KAAK,EAAE,CAAC,GAAW,EAAE,KAAe,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC;IACnE,IAAI,EAAE,CAAC,GAAW,EAAE,KAAe,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC;IACjE,IAAI,EAAE,CAAC,GAAW,EAAE,KAAe,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC;IACjE,KAAK,EAAE,CAAC,GAAW,EAAE,KAAe,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC;CACpE,CAAC"}
|