@meshy-ai/cli 0.1.3 → 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.
- package/.env.example +8 -2
- package/README.md +342 -108
- package/dist/client/endpoints/animation-catalog.d.ts +37 -0
- package/dist/client/endpoints/animation-catalog.d.ts.map +1 -0
- package/dist/client/endpoints/animation-catalog.js +55 -0
- package/dist/client/endpoints/animation-catalog.js.map +1 -0
- package/dist/client/endpoints/balance.d.ts +5 -0
- package/dist/client/endpoints/balance.d.ts.map +1 -1
- package/dist/client/endpoints/balance.js +5 -1
- package/dist/client/endpoints/balance.js.map +1 -1
- package/dist/client/endpoints/base.d.ts +41 -7
- package/dist/client/endpoints/base.d.ts.map +1 -1
- package/dist/client/endpoints/base.js +61 -40
- package/dist/client/endpoints/base.js.map +1 -1
- package/dist/client/endpoints/showcases.d.ts +31 -0
- package/dist/client/endpoints/showcases.d.ts.map +1 -0
- package/dist/client/endpoints/showcases.js +49 -0
- package/dist/client/endpoints/showcases.js.map +1 -0
- package/dist/client/errors.d.ts +1 -0
- package/dist/client/errors.d.ts.map +1 -1
- package/dist/client/errors.js +1 -1
- package/dist/client/errors.js.map +1 -1
- package/dist/client/index.d.ts +47 -38
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +89 -120
- package/dist/client/index.js.map +1 -1
- package/dist/client/resource-registry.d.ts +97 -0
- package/dist/client/resource-registry.d.ts.map +1 -0
- package/dist/client/resource-registry.js +157 -0
- package/dist/client/resource-registry.js.map +1 -0
- package/dist/client/transport.d.ts +99 -0
- package/dist/client/transport.d.ts.map +1 -0
- package/dist/client/transport.js +320 -0
- package/dist/client/transport.js.map +1 -0
- package/dist/client/types.d.ts +28 -221
- package/dist/client/types.d.ts.map +1 -1
- package/dist/client/types.js +28 -6
- package/dist/client/types.js.map +1 -1
- package/dist/cmd/animation-catalog.d.ts +26 -0
- package/dist/cmd/animation-catalog.d.ts.map +1 -0
- package/dist/cmd/animation-catalog.js +80 -0
- package/dist/cmd/animation-catalog.js.map +1 -0
- package/dist/cmd/api.d.ts +3 -2
- package/dist/cmd/api.d.ts.map +1 -1
- package/dist/cmd/api.js +22 -8
- package/dist/cmd/api.js.map +1 -1
- package/dist/cmd/auth.d.ts.map +1 -1
- package/dist/cmd/auth.js +5 -0
- package/dist/cmd/auth.js.map +1 -1
- package/dist/cmd/balance.d.ts.map +1 -1
- package/dist/cmd/balance.js +10 -6
- package/dist/cmd/balance.js.map +1 -1
- package/dist/cmd/creative-lab.d.ts +26 -0
- package/dist/cmd/creative-lab.d.ts.map +1 -0
- package/dist/cmd/creative-lab.js +256 -0
- package/dist/cmd/creative-lab.js.map +1 -0
- package/dist/cmd/delete.d.ts.map +1 -1
- package/dist/cmd/delete.js +6 -7
- package/dist/cmd/delete.js.map +1 -1
- package/dist/cmd/doctor.d.ts +23 -0
- package/dist/cmd/doctor.d.ts.map +1 -0
- package/dist/cmd/doctor.js +61 -0
- package/dist/cmd/doctor.js.map +1 -0
- package/dist/cmd/download.d.ts +17 -0
- package/dist/cmd/download.d.ts.map +1 -0
- package/dist/cmd/download.js +436 -0
- package/dist/cmd/download.js.map +1 -0
- package/dist/cmd/inspect.d.ts +63 -0
- package/dist/cmd/inspect.d.ts.map +1 -0
- package/dist/cmd/inspect.js +179 -0
- package/dist/cmd/inspect.js.map +1 -0
- package/dist/cmd/make.d.ts +13 -3
- package/dist/cmd/make.d.ts.map +1 -1
- package/dist/cmd/make.js +240 -36
- package/dist/cmd/make.js.map +1 -1
- package/dist/cmd/mesh.d.ts +13 -0
- package/dist/cmd/mesh.d.ts.map +1 -0
- package/dist/cmd/mesh.js +67 -0
- package/dist/cmd/mesh.js.map +1 -0
- package/dist/cmd/project.d.ts +16 -0
- package/dist/cmd/project.d.ts.map +1 -0
- package/dist/cmd/project.js +136 -0
- package/dist/cmd/project.js.map +1 -0
- package/dist/cmd/resources.d.ts +5 -0
- package/dist/cmd/resources.d.ts.map +1 -1
- package/dist/cmd/resources.js +38 -10
- package/dist/cmd/resources.js.map +1 -1
- package/dist/cmd/showcases.d.ts +10 -0
- package/dist/cmd/showcases.d.ts.map +1 -0
- package/dist/cmd/showcases.js +63 -0
- package/dist/cmd/showcases.js.map +1 -0
- package/dist/cmd/slicer.d.ts +12 -0
- package/dist/cmd/slicer.d.ts.map +1 -0
- package/dist/cmd/slicer.js +46 -0
- package/dist/cmd/slicer.js.map +1 -0
- package/dist/cmd/uv-unwrap.d.ts +16 -0
- package/dist/cmd/uv-unwrap.d.ts.map +1 -0
- package/dist/cmd/uv-unwrap.js +52 -0
- package/dist/cmd/uv-unwrap.js.map +1 -0
- package/dist/index.d.ts +13 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +141 -8
- package/dist/index.js.map +1 -1
- package/dist/internal/artifacts.d.ts +97 -0
- package/dist/internal/artifacts.d.ts.map +1 -0
- package/dist/internal/artifacts.js +280 -0
- package/dist/internal/artifacts.js.map +1 -0
- package/dist/internal/atomic-file.d.ts +39 -0
- package/dist/internal/atomic-file.d.ts.map +1 -0
- package/dist/internal/atomic-file.js +160 -0
- package/dist/internal/atomic-file.js.map +1 -0
- package/dist/internal/command-helpers.d.ts +46 -0
- package/dist/internal/command-helpers.d.ts.map +1 -0
- package/dist/internal/command-helpers.js +61 -0
- package/dist/internal/command-helpers.js.map +1 -0
- package/dist/internal/config.d.ts +48 -5
- package/dist/internal/config.d.ts.map +1 -1
- package/dist/internal/config.js +95 -6
- package/dist/internal/config.js.map +1 -1
- package/dist/internal/context.d.ts +25 -0
- package/dist/internal/context.d.ts.map +1 -0
- package/dist/internal/context.js +37 -0
- package/dist/internal/context.js.map +1 -0
- package/dist/internal/credentials.d.ts +11 -0
- package/dist/internal/credentials.d.ts.map +1 -1
- package/dist/internal/credentials.js +2 -0
- package/dist/internal/credentials.js.map +1 -1
- package/dist/internal/device-state.js.map +1 -1
- package/dist/internal/device.d.ts.map +1 -1
- package/dist/internal/doctor.d.ts +94 -0
- package/dist/internal/doctor.d.ts.map +1 -0
- package/dist/internal/doctor.js +280 -0
- package/dist/internal/doctor.js.map +1 -0
- package/dist/internal/download.d.ts +147 -13
- package/dist/internal/download.d.ts.map +1 -1
- package/dist/internal/download.js +735 -142
- package/dist/internal/download.js.map +1 -1
- package/dist/internal/env-file.d.ts +29 -0
- package/dist/internal/env-file.d.ts.map +1 -0
- package/dist/internal/env-file.js +95 -0
- package/dist/internal/env-file.js.map +1 -0
- package/dist/internal/errors.d.ts +74 -1
- package/dist/internal/errors.d.ts.map +1 -1
- package/dist/internal/errors.js +173 -1
- package/dist/internal/errors.js.map +1 -1
- package/dist/internal/file-input.d.ts +52 -12
- package/dist/internal/file-input.d.ts.map +1 -1
- package/dist/internal/file-input.js +162 -33
- package/dist/internal/file-input.js.map +1 -1
- package/dist/internal/flags.js.map +1 -1
- package/dist/internal/global-options.d.ts +6 -4
- package/dist/internal/global-options.d.ts.map +1 -1
- package/dist/internal/global-options.js +19 -4
- package/dist/internal/global-options.js.map +1 -1
- package/dist/internal/headless.js.map +1 -1
- package/dist/internal/image-models.d.ts.map +1 -1
- package/dist/internal/inspect.d.ts +67 -0
- package/dist/internal/inspect.d.ts.map +1 -0
- package/dist/internal/inspect.js +111 -0
- package/dist/internal/inspect.js.map +1 -0
- package/dist/internal/lock.d.ts +19 -0
- package/dist/internal/lock.d.ts.map +1 -0
- package/dist/internal/lock.js +66 -0
- package/dist/internal/lock.js.map +1 -0
- package/dist/internal/logger.d.ts.map +1 -1
- package/dist/internal/material-links.d.ts +115 -0
- package/dist/internal/material-links.d.ts.map +1 -0
- package/dist/internal/material-links.js +577 -0
- package/dist/internal/material-links.js.map +1 -0
- package/dist/internal/obj-transform.d.ts +115 -0
- package/dist/internal/obj-transform.d.ts.map +1 -0
- package/dist/internal/obj-transform.js +649 -0
- package/dist/internal/obj-transform.js.map +1 -0
- package/dist/internal/operation-store.d.ts +123 -0
- package/dist/internal/operation-store.d.ts.map +1 -0
- package/dist/internal/operation-store.js +229 -0
- package/dist/internal/operation-store.js.map +1 -0
- package/dist/internal/output.d.ts +20 -2
- package/dist/internal/output.d.ts.map +1 -1
- package/dist/internal/output.js +32 -4
- package/dist/internal/output.js.map +1 -1
- package/dist/internal/paths.d.ts +89 -0
- package/dist/internal/paths.d.ts.map +1 -0
- package/dist/internal/paths.js +168 -0
- package/dist/internal/paths.js.map +1 -0
- package/dist/internal/payload.d.ts +15 -0
- package/dist/internal/payload.d.ts.map +1 -1
- package/dist/internal/payload.js +50 -3
- package/dist/internal/payload.js.map +1 -1
- package/dist/internal/poll.d.ts +30 -4
- package/dist/internal/poll.d.ts.map +1 -1
- package/dist/internal/poll.js +99 -16
- package/dist/internal/poll.js.map +1 -1
- package/dist/internal/pricing.d.ts.map +1 -1
- package/dist/internal/project-store.d.ts +197 -0
- package/dist/internal/project-store.d.ts.map +1 -0
- package/dist/internal/project-store.js +467 -0
- package/dist/internal/project-store.js.map +1 -0
- package/dist/internal/result.d.ts +50 -0
- package/dist/internal/result.d.ts.map +1 -0
- package/dist/internal/result.js +41 -0
- package/dist/internal/result.js.map +1 -0
- package/dist/internal/runtime.d.ts +35 -5
- package/dist/internal/runtime.d.ts.map +1 -1
- package/dist/internal/runtime.js +68 -18
- package/dist/internal/runtime.js.map +1 -1
- package/dist/internal/slicers.d.ts +117 -0
- package/dist/internal/slicers.d.ts.map +1 -0
- package/dist/internal/slicers.js +314 -0
- package/dist/internal/slicers.js.map +1 -0
- package/dist/internal/stream.d.ts +58 -0
- package/dist/internal/stream.d.ts.map +1 -0
- package/dist/internal/stream.js +280 -0
- package/dist/internal/stream.js.map +1 -0
- package/dist/internal/task-command.d.ts +128 -11
- package/dist/internal/task-command.d.ts.map +1 -1
- package/dist/internal/task-command.js +991 -111
- package/dist/internal/task-command.js.map +1 -1
- package/dist/internal/task-view.d.ts +56 -0
- package/dist/internal/task-view.d.ts.map +1 -0
- package/dist/internal/task-view.js +95 -0
- package/dist/internal/task-view.js.map +1 -0
- package/dist/internal/update-notifier.d.ts +5 -1
- package/dist/internal/update-notifier.d.ts.map +1 -1
- package/dist/internal/update-notifier.js +7 -3
- package/dist/internal/update-notifier.js.map +1 -1
- package/dist/internal/version.js.map +1 -1
- package/dist/root.d.ts +10 -0
- package/dist/root.d.ts.map +1 -1
- package/dist/root.js +75 -10
- package/dist/root.js.map +1 -1
- package/package.json +11 -10
- package/skills/meshy-cli/SKILL.md +140 -59
- package/dist/client/endpoints/analyze-printability.d.ts +0 -5
- package/dist/client/endpoints/analyze-printability.d.ts.map +0 -1
- package/dist/client/endpoints/analyze-printability.js +0 -7
- package/dist/client/endpoints/analyze-printability.js.map +0 -1
- package/dist/client/endpoints/animate.d.ts +0 -6
- package/dist/client/endpoints/animate.d.ts.map +0 -1
- package/dist/client/endpoints/animate.js +0 -8
- package/dist/client/endpoints/animate.js.map +0 -1
- package/dist/client/endpoints/convert.d.ts +0 -5
- package/dist/client/endpoints/convert.d.ts.map +0 -1
- package/dist/client/endpoints/convert.js +0 -7
- package/dist/client/endpoints/convert.js.map +0 -1
- package/dist/client/endpoints/image-to-3d.d.ts +0 -5
- package/dist/client/endpoints/image-to-3d.d.ts.map +0 -1
- package/dist/client/endpoints/image-to-3d.js +0 -7
- package/dist/client/endpoints/image-to-3d.js.map +0 -1
- package/dist/client/endpoints/image-to-image.d.ts +0 -5
- package/dist/client/endpoints/image-to-image.d.ts.map +0 -1
- package/dist/client/endpoints/image-to-image.js +0 -7
- package/dist/client/endpoints/image-to-image.js.map +0 -1
- package/dist/client/endpoints/multi-color-print.d.ts +0 -5
- package/dist/client/endpoints/multi-color-print.d.ts.map +0 -1
- package/dist/client/endpoints/multi-color-print.js +0 -7
- package/dist/client/endpoints/multi-color-print.js.map +0 -1
- package/dist/client/endpoints/multi-image-to-3d.d.ts +0 -5
- package/dist/client/endpoints/multi-image-to-3d.d.ts.map +0 -1
- package/dist/client/endpoints/multi-image-to-3d.js +0 -7
- package/dist/client/endpoints/multi-image-to-3d.js.map +0 -1
- package/dist/client/endpoints/remesh.d.ts +0 -5
- package/dist/client/endpoints/remesh.d.ts.map +0 -1
- package/dist/client/endpoints/remesh.js +0 -7
- package/dist/client/endpoints/remesh.js.map +0 -1
- package/dist/client/endpoints/repair-printability.d.ts +0 -5
- package/dist/client/endpoints/repair-printability.d.ts.map +0 -1
- package/dist/client/endpoints/repair-printability.js +0 -7
- package/dist/client/endpoints/repair-printability.js.map +0 -1
- package/dist/client/endpoints/resize.d.ts +0 -5
- package/dist/client/endpoints/resize.d.ts.map +0 -1
- package/dist/client/endpoints/resize.js +0 -7
- package/dist/client/endpoints/resize.js.map +0 -1
- package/dist/client/endpoints/retexture.d.ts +0 -5
- package/dist/client/endpoints/retexture.d.ts.map +0 -1
- package/dist/client/endpoints/retexture.js +0 -7
- package/dist/client/endpoints/retexture.js.map +0 -1
- package/dist/client/endpoints/rigging.d.ts +0 -6
- package/dist/client/endpoints/rigging.d.ts.map +0 -1
- package/dist/client/endpoints/rigging.js +0 -8
- package/dist/client/endpoints/rigging.js.map +0 -1
- package/dist/client/endpoints/text-to-3d.d.ts +0 -6
- package/dist/client/endpoints/text-to-3d.d.ts.map +0 -1
- package/dist/client/endpoints/text-to-3d.js +0 -8
- package/dist/client/endpoints/text-to-3d.js.map +0 -1
- package/dist/client/endpoints/text-to-image.d.ts +0 -5
- package/dist/client/endpoints/text-to-image.d.ts.map +0 -1
- package/dist/client/endpoints/text-to-image.js +0 -7
- package/dist/client/endpoints/text-to-image.js.map +0 -1
- package/dist/client/endpoints/text-to-motion.d.ts +0 -6
- package/dist/client/endpoints/text-to-motion.d.ts.map +0 -1
- package/dist/client/endpoints/text-to-motion.js +0 -8
- package/dist/client/endpoints/text-to-motion.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../src/cmd/download.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AA+E5C,eAAO,MAAM,eAAe,SAmOxB,CAAC"}
|
|
@@ -0,0 +1,436 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* download — selective asset download for a task.
|
|
3
|
+
*
|
|
4
|
+
* Sources (exactly one): --task-json <file> (API task, legacy meta.json or a
|
|
5
|
+
* v1 envelope/result), --url <asset-url>, or --resource <id> --task-id <id>
|
|
6
|
+
* (one GET, then the assets). Selection (at most one): --asset <key>…,
|
|
7
|
+
* --model-format <fmt>, --kind <kind>, --all; with several assets and no
|
|
8
|
+
* selector the command lists the candidates and exits 2 instead of guessing.
|
|
9
|
+
*
|
|
10
|
+
* Output: --output <file> for exactly one asset, --output-dir <dir> otherwise.
|
|
11
|
+
* Files are published exclusively; --overwrite replaces atomically. Nothing
|
|
12
|
+
* is extracted, nothing is re-generated: an expired URL from a task JSON is
|
|
13
|
+
* reported as such, an API-sourced task is refreshed once.
|
|
14
|
+
*/
|
|
15
|
+
import { Command, Option } from "commander";
|
|
16
|
+
import { lstatSync, readFileSync, statSync } from "node:fs";
|
|
17
|
+
import { basename, dirname, join, resolve as resolvePath } from "node:path";
|
|
18
|
+
import { findTaskResource, TASK_RESOURCES } from "../client/resource-registry.js";
|
|
19
|
+
import { enumerateAssets, selectAssets, SelectionError } from "../internal/artifacts.js";
|
|
20
|
+
import { emitResult, openCommand, saveRawJson } from "../internal/command-helpers.js";
|
|
21
|
+
import { abortSignal } from "../internal/context.js";
|
|
22
|
+
import { downloadAssets } from "../internal/download.js";
|
|
23
|
+
import { CliError, UsageError } from "../internal/errors.js";
|
|
24
|
+
import { freezeRoot, realpathLenient, resolveWithinRoot, safeSegment } from "../internal/paths.js";
|
|
25
|
+
import { warning } from "../internal/result.js";
|
|
26
|
+
import { assertProjectMetadataPresent, indexRootFor, projectRecordCommand, readProject, recordTask, stageFromTaskType } from "../internal/project-store.js";
|
|
27
|
+
import { buildLocalRuntime, buildRuntime } from "../internal/runtime.js";
|
|
28
|
+
import { extractTaskObject } from "../internal/task-view.js";
|
|
29
|
+
import { relative } from "node:path";
|
|
30
|
+
const TASK_JSON_MAX_BYTES = 16 * 1024 * 1024;
|
|
31
|
+
const KINDS = ["model", "image", "texture", "thumbnail", "rig", "animation", "motion", "report"];
|
|
32
|
+
function collect(v, prev = []) {
|
|
33
|
+
return [...prev, v];
|
|
34
|
+
}
|
|
35
|
+
function resourceForTask(task, hint) {
|
|
36
|
+
if (hint) {
|
|
37
|
+
const d = findTaskResource(hint);
|
|
38
|
+
if (d)
|
|
39
|
+
return d;
|
|
40
|
+
}
|
|
41
|
+
const type = task["type"];
|
|
42
|
+
if (typeof type !== "string")
|
|
43
|
+
return null;
|
|
44
|
+
return TASK_RESOURCES.find((d) => d.taskTypes.includes(type)) ?? null;
|
|
45
|
+
}
|
|
46
|
+
function readTaskJson(path) {
|
|
47
|
+
const abs = resolvePath(path);
|
|
48
|
+
let st;
|
|
49
|
+
try {
|
|
50
|
+
st = statSync(abs);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
throw new UsageError(`--task-json: file not found: ${path}`);
|
|
54
|
+
}
|
|
55
|
+
if (!st.isFile())
|
|
56
|
+
throw new UsageError(`--task-json: not a regular file: ${path}`);
|
|
57
|
+
if (st.size > TASK_JSON_MAX_BYTES)
|
|
58
|
+
throw new UsageError(`--task-json: ${path} is larger than ${TASK_JSON_MAX_BYTES} bytes`);
|
|
59
|
+
let parsed;
|
|
60
|
+
try {
|
|
61
|
+
parsed = JSON.parse(readFileSync(abs, "utf8"));
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
throw new UsageError(`--task-json: ${path} is not valid JSON (${err instanceof Error ? err.message : String(err)})`);
|
|
65
|
+
}
|
|
66
|
+
const extracted = extractTaskObject(parsed);
|
|
67
|
+
if (!extracted)
|
|
68
|
+
throw new UsageError(`--task-json: ${path} does not contain a task (expected an API task, a meta.json, or a v1 envelope)`);
|
|
69
|
+
const o = parsed;
|
|
70
|
+
let hint = null;
|
|
71
|
+
if (extracted.source === "meta.json" && typeof o["resource"] === "string")
|
|
72
|
+
hint = o["resource"];
|
|
73
|
+
const view = o["result"]?.["task"];
|
|
74
|
+
if ((extracted.source === "v1-envelope" || extracted.source === "v1-result") && typeof view?.["resource"] === "string")
|
|
75
|
+
hint = view["resource"];
|
|
76
|
+
return { task: extracted.task, resourceHint: hint, shape: extracted.source };
|
|
77
|
+
}
|
|
78
|
+
export const downloadCommand = new Command("download")
|
|
79
|
+
.description("Download selected assets of a task (from a saved task JSON, a URL, or the API) with explicit selection and safe file placement")
|
|
80
|
+
.option("--task-json <file>", "task JSON saved earlier (API task, meta.json or v1 envelope)")
|
|
81
|
+
.option("--url <url>", "download exactly one asset URL (no task context)")
|
|
82
|
+
.option("--resource <id>", "with --task-id: fetch the task from the API first (one GET)")
|
|
83
|
+
.option("--task-id <id>", "with --resource: the task to fetch")
|
|
84
|
+
.option("--asset <key>", "stable asset key to download (repeatable), e.g. model.glb, thumbnail.primary, result.basic_animations.walking_glb_url", collect)
|
|
85
|
+
.option("--model-format <fmt>", "select the model of this format (glb, obj, fbx, usdz, stl, 3mf, …)")
|
|
86
|
+
.addOption(new Option("--kind <kind>", "select every asset of one kind").choices([...KINDS]))
|
|
87
|
+
.option("--all", "select every asset")
|
|
88
|
+
.option("--list", "list the task's assets and exit without downloading")
|
|
89
|
+
.option("--output-dir <dir>", "directory to write into (for several assets); mutually exclusive with --output/-o")
|
|
90
|
+
.option("--overwrite", "replace existing files atomically (never directories or symlinks)")
|
|
91
|
+
.option("--with-dependencies", "for OBJ selections also fetch the MTL and textures (default)")
|
|
92
|
+
.option("--geometry-only", "for OBJ selections fetch the OBJ alone")
|
|
93
|
+
.option("--save-json <file>", "save the raw task JSON (API source) alongside")
|
|
94
|
+
.option("--include-raw", "v1: include the raw task under result.source.raw")
|
|
95
|
+
.option("--project <dir>", "initialised meshy_output project: default output directory, and the files are recorded in metadata.json")
|
|
96
|
+
.option("--stage <name>", "stage label for the project record (default: derived from the task type)")
|
|
97
|
+
.action(async (opts, thisCmd) => {
|
|
98
|
+
const opened = openCommand(thisCmd, "download", "v1");
|
|
99
|
+
const sources = [opts.taskJson ? "task-json" : null, opts.url ? "url" : null, opts.resource || opts.taskId ? "api" : null].filter(Boolean);
|
|
100
|
+
if (sources.length !== 1)
|
|
101
|
+
throw new UsageError("provide exactly one source: --task-json <file>, --url <url>, or --resource <id> --task-id <id>");
|
|
102
|
+
if ((opts.resource && !opts.taskId) || (!opts.resource && opts.taskId))
|
|
103
|
+
throw new UsageError("--resource and --task-id go together");
|
|
104
|
+
const selectors = [opts.asset?.length ? "asset" : null, opts.modelFormat ? "model-format" : null, opts.kind ? "kind" : null, opts.all ? "all" : null].filter(Boolean);
|
|
105
|
+
if (selectors.length > 1)
|
|
106
|
+
throw new UsageError(`selectors are mutually exclusive (got ${selectors.map((s) => `--${s}`).join(", ")})`);
|
|
107
|
+
if (opts.withDependencies && opts.geometryOnly)
|
|
108
|
+
throw new UsageError("--with-dependencies and --geometry-only are mutually exclusive");
|
|
109
|
+
if (opened.flags.output && opts.outputDir)
|
|
110
|
+
throw new UsageError("--output/-o and --output-dir are mutually exclusive");
|
|
111
|
+
// The write boundary was frozen with the flags (--workspace); without one the
|
|
112
|
+
// project directory itself is frozen here, before any request.
|
|
113
|
+
const workspaceRoot = opened.flags.workspaceRoot;
|
|
114
|
+
const projectDir = opts.project
|
|
115
|
+
? workspaceRoot
|
|
116
|
+
? resolveWithinRoot(resolvePath(opts.project), workspaceRoot, { label: "--project" }).path
|
|
117
|
+
: resolvePath(opts.project)
|
|
118
|
+
: null;
|
|
119
|
+
if (projectDir)
|
|
120
|
+
preflightProject(projectDir, opts.project, opts.stage);
|
|
121
|
+
const projectRoot = projectDir ? (workspaceRoot ?? freezeRoot(projectDir, { label: "--project" })) : null;
|
|
122
|
+
if (projectDir && opts.url)
|
|
123
|
+
throw new UsageError("--project needs a task context; it cannot be combined with --url");
|
|
124
|
+
const warnings = [];
|
|
125
|
+
// ---- source ----
|
|
126
|
+
let task = null;
|
|
127
|
+
let raw = null;
|
|
128
|
+
let descriptor = null;
|
|
129
|
+
let sourceInfo;
|
|
130
|
+
let refreshUrls;
|
|
131
|
+
if (opts.url) {
|
|
132
|
+
buildLocalRuntime(opened.flags);
|
|
133
|
+
sourceInfo = { kind: "url", url: opts.url.split("?")[0] };
|
|
134
|
+
if (opts.list || selectors.length > 0)
|
|
135
|
+
throw new UsageError("--url downloads exactly one URL; selectors and --list do not apply");
|
|
136
|
+
}
|
|
137
|
+
else if (opts.taskJson) {
|
|
138
|
+
buildLocalRuntime(opened.flags);
|
|
139
|
+
const read = readTaskJson(opts.taskJson);
|
|
140
|
+
task = read.task;
|
|
141
|
+
raw = read.task;
|
|
142
|
+
descriptor = resourceForTask(task, read.resourceHint);
|
|
143
|
+
sourceInfo = { kind: "task-json", path: resolvePath(opts.taskJson), shape: read.shape, resource: descriptor?.id ?? null, task_id: task["id"] ?? null };
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
const d = findTaskResource(opts.resource);
|
|
147
|
+
if (!d)
|
|
148
|
+
throw new UsageError(`unknown resource '${opts.resource}'; run \`meshy resources\``);
|
|
149
|
+
descriptor = d;
|
|
150
|
+
const runtime = await buildRuntime(opened.flags);
|
|
151
|
+
const endpoint = runtime.client.endpointFor(d);
|
|
152
|
+
const got = await endpoint.retrieveDetailed(opts.taskId, { signal: abortSignal() });
|
|
153
|
+
task = got.raw;
|
|
154
|
+
raw = got.raw;
|
|
155
|
+
sourceInfo = { kind: "api", resource: d.id, task_id: opts.taskId, status: task["status"] ?? null };
|
|
156
|
+
refreshUrls = async () => {
|
|
157
|
+
const again = await endpoint.retrieveDetailed(opts.taskId, { signal: abortSignal() });
|
|
158
|
+
const fresh = enumerateAssets(again.raw, d);
|
|
159
|
+
return new Map(fresh.assets.filter((a) => a.url).map((a) => [a.key, a.url]));
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
const savedJson = opts.saveJson && raw ? saveRawJson(opts.saveJson, raw, { workspace: workspaceRoot }) : null;
|
|
163
|
+
// ---- enumerate + select ----
|
|
164
|
+
let selected;
|
|
165
|
+
let dependencies = [];
|
|
166
|
+
let enumeration = null;
|
|
167
|
+
if (opts.url) {
|
|
168
|
+
const name = safeSegment(basename(new URL(opts.url).pathname) || "asset", "asset");
|
|
169
|
+
selected = [{ key: "url", kind: "model", url: opts.url, format: null, containerFormat: null, modelFormat: null, sourcePath: "url", filename: name, dependencies: [] }];
|
|
170
|
+
// Kind is unknown for a bare URL: content validation only checks for HTML pages.
|
|
171
|
+
selected[0].kind = "image";
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
enumeration = enumerateAssets(task, descriptor);
|
|
175
|
+
if (task["status"] !== "SUCCEEDED" && enumeration.assets.length === 0) {
|
|
176
|
+
await emitResult(opened, null, { source: sourceInfo, assets: [], downloads: { state: "not_ready", files: [], metadata_path: null }, saved_json: savedJson, unknown_urls: enumeration.unknown_urls }, {
|
|
177
|
+
warnings: [warning("task_not_ready", `task status is ${String(task["status"])}; no assets to download yet`)],
|
|
178
|
+
});
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
if (opts.list) {
|
|
182
|
+
await emitResult(opened, null, {
|
|
183
|
+
source: sourceInfo,
|
|
184
|
+
assets: enumeration.assets.map(describeAsset),
|
|
185
|
+
unknown_urls: enumeration.unknown_urls,
|
|
186
|
+
product: enumeration.product,
|
|
187
|
+
saved_json: savedJson,
|
|
188
|
+
...(opts.includeRaw ? { raw } : {}),
|
|
189
|
+
});
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
const withDeps = !opts.geometryOnly;
|
|
193
|
+
try {
|
|
194
|
+
const sel = selectors.length === 0
|
|
195
|
+
? (enumeration.assets.length === 1
|
|
196
|
+
? { keys: [enumeration.assets[0].key] }
|
|
197
|
+
: (() => {
|
|
198
|
+
throw new SelectionError(`task exposes ${enumeration.assets.length} assets; choose with --asset, --model-format, --kind or --all`, enumeration.assets);
|
|
199
|
+
})())
|
|
200
|
+
: { keys: opts.asset, modelFormat: opts.modelFormat, kind: opts.kind, all: opts.all };
|
|
201
|
+
const result = selectAssets(enumeration, sel, { withDependencies: withDeps });
|
|
202
|
+
selected = result.selected;
|
|
203
|
+
dependencies = result.dependencies;
|
|
204
|
+
for (const m of result.missingDependencies)
|
|
205
|
+
warnings.push(warning("material_dependency_missing", `${m} is not available in this task; the OBJ will be delivered without it`));
|
|
206
|
+
}
|
|
207
|
+
catch (err) {
|
|
208
|
+
if (err instanceof SelectionError) {
|
|
209
|
+
throw new CliError({ code: "usage", message: err.message, result: { source: sourceInfo, assets: err.candidates } });
|
|
210
|
+
}
|
|
211
|
+
throw err;
|
|
212
|
+
}
|
|
213
|
+
if (opts.geometryOnly && selected.some((a) => a.modelFormat === "obj" && a.containerFormat === null)) {
|
|
214
|
+
warnings.push(warning("geometry_only", "OBJ delivered without its MTL/textures as requested"));
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
const toDownload = [...selected, ...dependencies];
|
|
218
|
+
// ---- output placement ----
|
|
219
|
+
const outputFile = opened.flags.output;
|
|
220
|
+
const outputDir = opts.outputDir ?? (projectDir && !outputFile ? projectDir : undefined);
|
|
221
|
+
if (!outputFile && !outputDir)
|
|
222
|
+
throw new UsageError("pass --output <file> (single asset) or --output-dir <dir>");
|
|
223
|
+
if (outputFile && toDownload.length > 1) {
|
|
224
|
+
throw new UsageError(`${toDownload.length} files would be written (${toDownload.map((a) => a.key).join(", ")}); --output names one file — use --output-dir <dir>`);
|
|
225
|
+
}
|
|
226
|
+
const dir = outputFile ? dirname(resolvePath(outputFile)) : resolvePath(outputDir);
|
|
227
|
+
const root = workspaceRoot ?? dir;
|
|
228
|
+
const files = [];
|
|
229
|
+
let result;
|
|
230
|
+
try {
|
|
231
|
+
result = await downloadAssets(toDownload, {
|
|
232
|
+
targetFile: outputFile ? resolvePath(outputFile) : undefined,
|
|
233
|
+
targetDir: outputFile ? undefined : dir,
|
|
234
|
+
overwrite: Boolean(opts.overwrite),
|
|
235
|
+
root,
|
|
236
|
+
signal: abortSignal(),
|
|
237
|
+
refreshUrls,
|
|
238
|
+
onFile: (f) => files.push(f),
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
catch (err) {
|
|
242
|
+
if (err instanceof CliError) {
|
|
243
|
+
const expired = err.httpStatus === 401 || err.httpStatus === 403 || err.httpStatus === 410;
|
|
244
|
+
const hint = expired && !refreshUrls && descriptor && task
|
|
245
|
+
? `signed URL rejected and a task JSON cannot refresh it; re-fetch with \`meshy ${descriptor.commandPath.join(" ")} get ${String(task["id"])} --save-json <file> --output-schema v1\` (no new task is created)`
|
|
246
|
+
: undefined;
|
|
247
|
+
throw new CliError({
|
|
248
|
+
code: err.code,
|
|
249
|
+
message: hint ? `${err.message}. ${hint}` : err.message,
|
|
250
|
+
httpStatus: err.httpStatus,
|
|
251
|
+
recovery: hint && descriptor && task ? { action: "refresh_task", automatic: false, command: `meshy ${descriptor.commandPath.join(" ")} get ${String(task["id"])} --save-json <file> --output-schema v1` } : err.recovery,
|
|
252
|
+
result: { source: sourceInfo, ...(err.result ?? {}), saved_json: savedJson },
|
|
253
|
+
warnings: [...warnings, ...err.warnings],
|
|
254
|
+
cause: err,
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
throw err;
|
|
258
|
+
}
|
|
259
|
+
warnings.push(...result.warnings.map((w) => warning(w.code, w.message)));
|
|
260
|
+
// Everything the caller must still learn if the project bookkeeping below
|
|
261
|
+
// fails: what was asked for, what landed (with the digests on disk), where
|
|
262
|
+
// the raw task went. The project phase never owns this state.
|
|
263
|
+
const outcome = {
|
|
264
|
+
source: sourceInfo,
|
|
265
|
+
selection: { selected: selected.map((a) => a.key), dependencies: dependencies.map((a) => a.key) },
|
|
266
|
+
downloads: { state: result.complete ? "completed" : "partial", files: result.files, metadata_path: null, material_links: result.materialLinks },
|
|
267
|
+
unknown_urls: enumeration?.unknown_urls ?? [],
|
|
268
|
+
saved_json: savedJson,
|
|
269
|
+
...(opts.includeRaw ? { raw } : {}),
|
|
270
|
+
};
|
|
271
|
+
let project = null;
|
|
272
|
+
if (projectDir && task) {
|
|
273
|
+
const written = result.files.filter((f) => f.status === "written");
|
|
274
|
+
const input = {
|
|
275
|
+
taskId: String(task["id"] ?? opts.taskId ?? ""),
|
|
276
|
+
stage: opts.stage ?? stageFromTaskType(task["type"], descriptor?.id ?? "download"),
|
|
277
|
+
resource: descriptor?.id ?? null,
|
|
278
|
+
taskType: typeof task["type"] === "string" ? task["type"] : null,
|
|
279
|
+
endpoint: descriptor?.legacyEndpoint ?? null,
|
|
280
|
+
status: typeof task["status"] === "string" ? task["status"] : null,
|
|
281
|
+
files: [],
|
|
282
|
+
};
|
|
283
|
+
const workspace = workspaceRoot?.given;
|
|
284
|
+
// 1. The location, against the boundary frozen before the transfers: the
|
|
285
|
+
// frozen directory must still be there and the project must resolve
|
|
286
|
+
// inside it now. A project (or a parent of it) replaced by a symlink to
|
|
287
|
+
// somewhere else during the transfer is refused before any lock,
|
|
288
|
+
// snapshot or metadata write — and gets no command that would write there.
|
|
289
|
+
let located;
|
|
290
|
+
try {
|
|
291
|
+
located = resolveWithinRoot(projectDir, projectRoot, { label: "--project" }).path;
|
|
292
|
+
}
|
|
293
|
+
catch (err) {
|
|
294
|
+
throw projectBoundaryFailure(err, { projectDir, dir, input, written: written.length, outcome, warnings });
|
|
295
|
+
}
|
|
296
|
+
try {
|
|
297
|
+
// Compare in one real-path frame: the project may be reached through an
|
|
298
|
+
// alias (a symlinked parent, macOS /var → /private/var) while the
|
|
299
|
+
// downloader reports real paths; the recorded name is relative to the real project.
|
|
300
|
+
// The file list is known before the project is examined, so a recovery
|
|
301
|
+
// command always names what landed inside the project.
|
|
302
|
+
input.files = written
|
|
303
|
+
.map((f) => relative(located, realpathLenient(f.path)).split(/[\\/]/).join("/"))
|
|
304
|
+
.filter((f) => f.length > 0 && !f.startsWith("..") && !f.startsWith("/"));
|
|
305
|
+
// 2. The project passed the preflight; it must still be one now. Writes go through the real path.
|
|
306
|
+
assertProjectMetadataPresent(located, opts.project);
|
|
307
|
+
const indexRoot = indexRootFor(located, undefined, workspaceRoot);
|
|
308
|
+
const rec = recordTask(located, input, { root: indexRoot.root, skipIndex: indexRoot.skipIndex });
|
|
309
|
+
if (!rec.index.updated)
|
|
310
|
+
warnings.push(warning("index_dirty", `metadata.json committed but history.json was not updated: ${rec.index.error}`));
|
|
311
|
+
if (input.files.length !== written.length)
|
|
312
|
+
warnings.push(warning("files_outside_project", "some files were written outside the project directory and were not recorded"));
|
|
313
|
+
project = { project_dir: projectDir, action: rec.action, stage: rec.entry.stage, recorded_files: input.files };
|
|
314
|
+
}
|
|
315
|
+
catch (err) {
|
|
316
|
+
throw projectRecordFailure(err, { projectDir, workspace, dir, input, written: written.length, outcome, warnings });
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
await emitResult(opened, null, { ...outcome, project }, { warnings });
|
|
320
|
+
});
|
|
321
|
+
/**
|
|
322
|
+
* `--project` checks that can fail before any transfer, so that they do:
|
|
323
|
+
* metadata.json must exist, be a regular file (never a symlink the record
|
|
324
|
+
* step would refuse to replace) and parse as a project; `--stage` must not be
|
|
325
|
+
* blank. Nothing is downloaded when one of these fails. What changes *after*
|
|
326
|
+
* this check is caught by `projectRecordFailure`.
|
|
327
|
+
*/
|
|
328
|
+
function preflightProject(projectDir, flag, stage) {
|
|
329
|
+
const metaPath = join(projectDir, "metadata.json");
|
|
330
|
+
let st = null;
|
|
331
|
+
try {
|
|
332
|
+
st = lstatSync(metaPath);
|
|
333
|
+
}
|
|
334
|
+
catch (err) {
|
|
335
|
+
if (err.code !== "ENOENT" && err.code !== "ENOTDIR")
|
|
336
|
+
throw err;
|
|
337
|
+
}
|
|
338
|
+
if (!st)
|
|
339
|
+
throw new UsageError(`--project ${flag} is not an initialised project (no metadata.json); run \`meshy project init\` first`);
|
|
340
|
+
if (!st.isFile()) {
|
|
341
|
+
throw new CliError({ code: "local_io", message: `--project ${flag}: metadata.json is not a regular file (${st.isSymbolicLink() ? "a symbolic link" : st.isDirectory() ? "a directory" : "special"}); nothing was downloaded` });
|
|
342
|
+
}
|
|
343
|
+
try {
|
|
344
|
+
readProject(projectDir);
|
|
345
|
+
}
|
|
346
|
+
catch (err) {
|
|
347
|
+
if (err instanceof CliError) {
|
|
348
|
+
throw new CliError({ code: err.code, message: `--project ${flag}: ${err.message} (nothing was downloaded)`, recovery: err.recovery, cause: err });
|
|
349
|
+
}
|
|
350
|
+
throw err;
|
|
351
|
+
}
|
|
352
|
+
if (stage !== undefined && stage.trim() === "")
|
|
353
|
+
throw new UsageError("--stage must not be blank");
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* The transfers are done and the files are on disk, but the project no longer
|
|
357
|
+
* lies inside the boundary frozen when the command started (its directory or a
|
|
358
|
+
* parent was replaced by a symlink to somewhere else, or the boundary itself
|
|
359
|
+
* was moved). Nothing was locked, snapshotted or written; the complete download
|
|
360
|
+
* result is kept and `project.action` is `failed` — and no `meshy project
|
|
361
|
+
* record` command is offered, because the only one that would succeed is one
|
|
362
|
+
* that writes across the boundary.
|
|
363
|
+
*/
|
|
364
|
+
function projectBoundaryFailure(err, ctx) {
|
|
365
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
366
|
+
return new CliError({
|
|
367
|
+
code: "local_io",
|
|
368
|
+
message: `${ctx.written} file(s) were downloaded to ${ctx.dir} but --project ${ctx.projectDir} is no longer a target inside the authorised boundary: ${reason}; nothing was recorded (no project lock, snapshot or metadata was written). Restore the project inside the workspace, then record task ${ctx.input.taskId} with \`meshy project record\` from that workspace`,
|
|
369
|
+
warnings: ctx.warnings,
|
|
370
|
+
details: { project: ctx.projectDir, task_id: ctx.input.taskId, stage: ctx.input.stage, recorded: false },
|
|
371
|
+
result: {
|
|
372
|
+
...ctx.outcome,
|
|
373
|
+
project: {
|
|
374
|
+
project_dir: ctx.projectDir,
|
|
375
|
+
action: "failed",
|
|
376
|
+
stage: ctx.input.stage,
|
|
377
|
+
recorded_files: [],
|
|
378
|
+
error: { code: "local_io", message: reason },
|
|
379
|
+
recovery: null,
|
|
380
|
+
},
|
|
381
|
+
},
|
|
382
|
+
cause: err,
|
|
383
|
+
});
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* The transfers are done and the files are on disk; only the project entry
|
|
387
|
+
* could not be written. The error keeps its own class (a refused symlink,
|
|
388
|
+
* a damaged metadata.json, a lock timeout, a full disk are all local_io) and
|
|
389
|
+
* carries the complete download result plus a `project` record that says what
|
|
390
|
+
* failed and the one command that redoes just the bookkeeping. Nothing is
|
|
391
|
+
* rolled back, re-downloaded or re-submitted.
|
|
392
|
+
*/
|
|
393
|
+
function projectRecordFailure(err, ctx) {
|
|
394
|
+
const base = err instanceof CliError ? err : null;
|
|
395
|
+
const code = base?.code ?? "local_io";
|
|
396
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
397
|
+
const command = projectRecordCommand(ctx.projectDir, ctx.input, { workspace: ctx.workspace });
|
|
398
|
+
const recovery = { action: "record_project", automatic: false, command };
|
|
399
|
+
return new CliError({
|
|
400
|
+
code,
|
|
401
|
+
message: `${ctx.written} file(s) were downloaded to ${ctx.dir} but recording task ${ctx.input.taskId} in project ${ctx.projectDir} failed: ${reason}`,
|
|
402
|
+
exitCode: base?.exitCode,
|
|
403
|
+
httpStatus: base?.httpStatus ?? null,
|
|
404
|
+
retryable: base?.retryable ?? false,
|
|
405
|
+
recovery,
|
|
406
|
+
hint: command,
|
|
407
|
+
details: base?.details,
|
|
408
|
+
warnings: [...ctx.warnings, ...(base?.warnings ?? [])],
|
|
409
|
+
result: {
|
|
410
|
+
...ctx.outcome,
|
|
411
|
+
project: {
|
|
412
|
+
project_dir: ctx.projectDir,
|
|
413
|
+
action: "failed",
|
|
414
|
+
stage: ctx.input.stage,
|
|
415
|
+
recorded_files: [],
|
|
416
|
+
error: { code, message: reason },
|
|
417
|
+
recovery,
|
|
418
|
+
},
|
|
419
|
+
},
|
|
420
|
+
cause: err,
|
|
421
|
+
});
|
|
422
|
+
}
|
|
423
|
+
function describeAsset(a) {
|
|
424
|
+
return {
|
|
425
|
+
key: a.key,
|
|
426
|
+
kind: a.kind,
|
|
427
|
+
format: a.format,
|
|
428
|
+
model_format: a.modelFormat,
|
|
429
|
+
container_format: a.containerFormat,
|
|
430
|
+
filename: a.filename,
|
|
431
|
+
dependencies: a.dependencies,
|
|
432
|
+
has_url: a.url !== null,
|
|
433
|
+
...(a.notes ?? {}),
|
|
434
|
+
};
|
|
435
|
+
}
|
|
436
|
+
//# sourceMappingURL=download.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"download.js","sourceRoot":"","sources":["../../src/cmd/download.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* inspect faces — the face-count gate.
|
|
3
|
+
*
|
|
4
|
+
* Two mutually exclusive task sources: a saved task JSON (no network, no
|
|
5
|
+
* credential, no config directory) or exactly one GET of a task through the
|
|
6
|
+
* resource registry. The command never downloads a model and never creates a
|
|
7
|
+
* remesh task; a failing verdict only *describes* the remesh that would help.
|
|
8
|
+
*
|
|
9
|
+
* `--max-faces` is required on purpose: the rigging ceiling (300000) is one
|
|
10
|
+
* consumer's rule and uv-unwrap's is 40000 — there is no limit that belongs
|
|
11
|
+
* to every mesh, so none is assumed. Exit codes: pass 0, fail 12, unknown 13
|
|
12
|
+
* (D-009). Nothing printed here claims more than the face count.
|
|
13
|
+
*/
|
|
14
|
+
import { Command } from "commander";
|
|
15
|
+
import { type SavedJson } from "../internal/command-helpers.js";
|
|
16
|
+
import { type RemeshSuggestion } from "../internal/inspect.js";
|
|
17
|
+
/** Engineering limit for a local task JSON (D-018); enforced while reading, never by truncation. */
|
|
18
|
+
export declare const TASK_JSON_MAX_BYTES: number;
|
|
19
|
+
export type TaskJsonShape = "api" | "meta.json" | "v1-envelope" | "v1-result";
|
|
20
|
+
export interface LoadedTaskJson {
|
|
21
|
+
path: string;
|
|
22
|
+
task: Record<string, unknown>;
|
|
23
|
+
shape: TaskJsonShape;
|
|
24
|
+
}
|
|
25
|
+
/** `--max-faces` accepts a plain positive integer; "3.5", "0", "-1" and "abc" are usage errors. */
|
|
26
|
+
export declare function parseMaxFaces(raw: string): number;
|
|
27
|
+
/**
|
|
28
|
+
* Read a task from a local JSON file in any shape the CLI writes or the API
|
|
29
|
+
* returns (API task, download meta.json, v1 envelope / result). Every problem
|
|
30
|
+
* with the file is a usage error: the caller named it, so a bad file is a
|
|
31
|
+
* mistake to report, not a fact about the model.
|
|
32
|
+
*/
|
|
33
|
+
export declare function readTaskJsonFile(path: string, opts?: {
|
|
34
|
+
cwd?: string;
|
|
35
|
+
maxBytes?: number;
|
|
36
|
+
}): LoadedTaskJson;
|
|
37
|
+
export interface FacesResult {
|
|
38
|
+
face_count: number | null;
|
|
39
|
+
limit: number;
|
|
40
|
+
comparison: "lte";
|
|
41
|
+
verdict: "pass" | "fail" | "unknown";
|
|
42
|
+
reason: string | null;
|
|
43
|
+
source: {
|
|
44
|
+
kind: "task-json";
|
|
45
|
+
path: string;
|
|
46
|
+
shape: TaskJsonShape;
|
|
47
|
+
} | {
|
|
48
|
+
kind: "api";
|
|
49
|
+
resource: string;
|
|
50
|
+
task_id: string;
|
|
51
|
+
endpoint: string;
|
|
52
|
+
requests_made: 1;
|
|
53
|
+
};
|
|
54
|
+
task_id: string | null;
|
|
55
|
+
status: string | null;
|
|
56
|
+
/** Only on `fail`: an unexecuted remesh the caller may run. */
|
|
57
|
+
suggestion: RemeshSuggestion | null;
|
|
58
|
+
saved_json: SavedJson | null;
|
|
59
|
+
}
|
|
60
|
+
/** Build a fresh `inspect` command tree (tests parse a new tree per run). */
|
|
61
|
+
export declare function buildInspectCommand(): Command;
|
|
62
|
+
export declare const inspectCommand: Command;
|
|
63
|
+
//# sourceMappingURL=inspect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../../src/cmd/inspect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAA+D,KAAK,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAG7H,OAAO,EAA+B,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAI5F,oGAAoG;AACpG,eAAO,MAAM,mBAAmB,QAAmB,CAAC;AAEpD,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,WAAW,GAAG,aAAa,GAAG,WAAW,CAAC;AAE9E,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,KAAK,EAAE,aAAa,CAAC;CACtB;AAiBD,mGAAmG;AACnG,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMjD;AAkBD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,cAAc,CA8B7G;AAqBD,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,KAAK,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACrC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EACF;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,aAAa,CAAA;KAAE,GACzD;QAAE,IAAI,EAAE,KAAK,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,CAAC,CAAA;KAAE,CAAC;IAC3F,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,+DAA+D;IAC/D,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC,UAAU,EAAE,SAAS,GAAG,IAAI,CAAC;CAC9B;AAED,6EAA6E;AAC7E,wBAAgB,mBAAmB,IAAI,OAAO,CAmE7C;AAED,eAAO,MAAM,cAAc,SAAwB,CAAC"}
|