@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,280 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server-Sent Events for task status.
|
|
3
|
+
*
|
|
4
|
+
* The parser follows the WHATWG EventSource algorithm: UTF-8 is decoded
|
|
5
|
+
* across chunk boundaries, lines end at CR, LF or CRLF, an empty line
|
|
6
|
+
* dispatches the event, multi-line `data:` fields are joined with "\n",
|
|
7
|
+
* comment lines (leading ':') are ignored, `id:` and `retry:` are recorded
|
|
8
|
+
* but never used to fabricate a Last-Event-ID we did not receive.
|
|
9
|
+
*
|
|
10
|
+
* Meshy's stream emits `event: message` with the full task JSON (also as the
|
|
11
|
+
* ~10 s keep-alive) and `event: error` with `{message, status_code}` — which
|
|
12
|
+
* can arrive after an HTTP 200, so it is mapped exactly like an HTTP failure.
|
|
13
|
+
*/
|
|
14
|
+
import { codeForStatus, MeshyApiError } from "../client/errors.js";
|
|
15
|
+
import { TaskSchema, isTerminalStatus } from "../client/types.js";
|
|
16
|
+
import { CliError } from "./errors.js";
|
|
17
|
+
export const DEFAULT_MAX_SSE_EVENT_BYTES = 1024 * 1024;
|
|
18
|
+
export function createSseParser(opts = {}) {
|
|
19
|
+
const maxEventBytes = opts.maxEventBytes ?? DEFAULT_MAX_SSE_EVENT_BYTES;
|
|
20
|
+
const decoder = new TextDecoder("utf-8");
|
|
21
|
+
let buffer = "";
|
|
22
|
+
let eventType = "";
|
|
23
|
+
let dataLines = [];
|
|
24
|
+
let lastId = null;
|
|
25
|
+
let retry = null;
|
|
26
|
+
let pendingBytes = 0;
|
|
27
|
+
let first = true;
|
|
28
|
+
function dispatch(out) {
|
|
29
|
+
if (dataLines.length === 0) {
|
|
30
|
+
eventType = "";
|
|
31
|
+
pendingBytes = 0;
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
out.push({ event: eventType || "message", data: dataLines.join("\n"), id: lastId, retry });
|
|
35
|
+
eventType = "";
|
|
36
|
+
dataLines = [];
|
|
37
|
+
pendingBytes = 0;
|
|
38
|
+
}
|
|
39
|
+
function processLine(line, out) {
|
|
40
|
+
if (line === "") {
|
|
41
|
+
dispatch(out);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
if (line.startsWith(":"))
|
|
45
|
+
return; // comment / heartbeat
|
|
46
|
+
let field;
|
|
47
|
+
let value;
|
|
48
|
+
const colon = line.indexOf(":");
|
|
49
|
+
if (colon === -1) {
|
|
50
|
+
field = line;
|
|
51
|
+
value = "";
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
field = line.slice(0, colon);
|
|
55
|
+
value = line.slice(colon + 1);
|
|
56
|
+
if (value.startsWith(" "))
|
|
57
|
+
value = value.slice(1);
|
|
58
|
+
}
|
|
59
|
+
switch (field) {
|
|
60
|
+
case "event":
|
|
61
|
+
eventType = value;
|
|
62
|
+
break;
|
|
63
|
+
case "data":
|
|
64
|
+
pendingBytes += Buffer.byteLength(value, "utf8") + 1;
|
|
65
|
+
if (pendingBytes > maxEventBytes) {
|
|
66
|
+
throw new CliError({ code: "protocol", message: `SSE event exceeds ${maxEventBytes} bytes` });
|
|
67
|
+
}
|
|
68
|
+
dataLines.push(value);
|
|
69
|
+
break;
|
|
70
|
+
case "id":
|
|
71
|
+
if (!value.includes(" "))
|
|
72
|
+
lastId = value;
|
|
73
|
+
break;
|
|
74
|
+
case "retry": {
|
|
75
|
+
const n = Number(value);
|
|
76
|
+
if (Number.isInteger(n) && n >= 0)
|
|
77
|
+
retry = n;
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
default:
|
|
81
|
+
break; // unknown fields are ignored per spec
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
function consume(text, out, final) {
|
|
85
|
+
buffer += text;
|
|
86
|
+
if (first && buffer.startsWith("\uFEFF"))
|
|
87
|
+
buffer = buffer.slice(1);
|
|
88
|
+
first = false;
|
|
89
|
+
let start = 0;
|
|
90
|
+
for (;;) {
|
|
91
|
+
const cr = buffer.indexOf("\r", start);
|
|
92
|
+
const lf = buffer.indexOf("\n", start);
|
|
93
|
+
let end;
|
|
94
|
+
let next;
|
|
95
|
+
if (cr === -1 && lf === -1)
|
|
96
|
+
break;
|
|
97
|
+
if (cr !== -1 && (lf === -1 || cr < lf)) {
|
|
98
|
+
// CR, possibly followed by LF. A trailing CR at the very end of the
|
|
99
|
+
// buffer may be half of a CRLF — wait for more bytes unless final.
|
|
100
|
+
if (cr === buffer.length - 1 && !final)
|
|
101
|
+
break;
|
|
102
|
+
end = cr;
|
|
103
|
+
next = buffer[cr + 1] === "\n" ? cr + 2 : cr + 1;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
end = lf;
|
|
107
|
+
next = lf + 1;
|
|
108
|
+
}
|
|
109
|
+
processLine(buffer.slice(start, end), out);
|
|
110
|
+
start = next;
|
|
111
|
+
}
|
|
112
|
+
buffer = buffer.slice(start);
|
|
113
|
+
if (buffer.length > maxEventBytes) {
|
|
114
|
+
throw new CliError({ code: "protocol", message: `SSE line exceeds ${maxEventBytes} bytes without a line ending` });
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
feed(chunk) {
|
|
119
|
+
const out = [];
|
|
120
|
+
consume(decoder.decode(chunk, { stream: true }), out, false);
|
|
121
|
+
return out;
|
|
122
|
+
},
|
|
123
|
+
end() {
|
|
124
|
+
const out = [];
|
|
125
|
+
consume(decoder.decode(), out, true);
|
|
126
|
+
if (buffer.length > 0) {
|
|
127
|
+
processLine(buffer, out);
|
|
128
|
+
buffer = "";
|
|
129
|
+
}
|
|
130
|
+
dispatch(out);
|
|
131
|
+
return out;
|
|
132
|
+
},
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Open the task stream and consume it until a terminal task, an API error
|
|
137
|
+
* event, a deadline, a disconnect or an abort. The connection is always closed
|
|
138
|
+
* before this resolves.
|
|
139
|
+
*/
|
|
140
|
+
export async function streamTask(endpoint, taskId, opts) {
|
|
141
|
+
const started = performance.now();
|
|
142
|
+
const total = new AbortController();
|
|
143
|
+
const idle = new AbortController();
|
|
144
|
+
const totalTimer = setTimeout(() => total.abort(new Error("total timeout")), opts.timeoutMs);
|
|
145
|
+
let idleTimer;
|
|
146
|
+
const resetIdle = () => {
|
|
147
|
+
if (idleTimer)
|
|
148
|
+
clearTimeout(idleTimer);
|
|
149
|
+
idleTimer = setTimeout(() => idle.abort(new Error("idle timeout")), opts.idleTimeoutMs);
|
|
150
|
+
};
|
|
151
|
+
const signals = [total.signal, idle.signal];
|
|
152
|
+
if (opts.signal)
|
|
153
|
+
signals.push(opts.signal);
|
|
154
|
+
const signal = AbortSignal.any(signals);
|
|
155
|
+
const state = { task: null, raw: null, events: 0 };
|
|
156
|
+
const finish = (reason, error = null) => ({
|
|
157
|
+
reason,
|
|
158
|
+
task: state.task,
|
|
159
|
+
raw: state.raw,
|
|
160
|
+
events: state.events,
|
|
161
|
+
error,
|
|
162
|
+
elapsedMs: performance.now() - started,
|
|
163
|
+
});
|
|
164
|
+
const classifyAbort = () => {
|
|
165
|
+
if (opts.signal?.aborted)
|
|
166
|
+
return "interrupted";
|
|
167
|
+
if (total.signal.aborted)
|
|
168
|
+
return "timeout";
|
|
169
|
+
if (idle.signal.aborted)
|
|
170
|
+
return "idle_timeout";
|
|
171
|
+
return "disconnected";
|
|
172
|
+
};
|
|
173
|
+
let handle = null;
|
|
174
|
+
try {
|
|
175
|
+
resetIdle();
|
|
176
|
+
try {
|
|
177
|
+
handle = await endpoint.openStream(taskId, { signal, connectTimeoutMs: Math.min(opts.timeoutMs, opts.idleTimeoutMs) });
|
|
178
|
+
}
|
|
179
|
+
catch (err) {
|
|
180
|
+
if (signal.aborted)
|
|
181
|
+
return finish(classifyAbort());
|
|
182
|
+
throw err;
|
|
183
|
+
}
|
|
184
|
+
const contentType = handle.response.headers.get("content-type") ?? "";
|
|
185
|
+
if (!/text\/event-stream/i.test(contentType)) {
|
|
186
|
+
return finish("protocol", new CliError({ code: "protocol", message: `stream endpoint answered with content-type '${contentType || "(none)"}' instead of text/event-stream` }));
|
|
187
|
+
}
|
|
188
|
+
const body = handle.response.body;
|
|
189
|
+
if (!body)
|
|
190
|
+
return finish("protocol", new CliError({ code: "protocol", message: "stream response has no body" }));
|
|
191
|
+
const reader = body.getReader();
|
|
192
|
+
const parser = createSseParser({ maxEventBytes: opts.maxEventBytes });
|
|
193
|
+
const handleEvent = async (ev) => {
|
|
194
|
+
if (ev.event === "error") {
|
|
195
|
+
let payload = {};
|
|
196
|
+
try {
|
|
197
|
+
payload = JSON.parse(ev.data);
|
|
198
|
+
}
|
|
199
|
+
catch {
|
|
200
|
+
return finish("protocol", new CliError({ code: "protocol", message: `stream error event is not JSON: ${ev.data.slice(0, 200)}` }));
|
|
201
|
+
}
|
|
202
|
+
const status = typeof payload.status_code === "number" ? payload.status_code : 0;
|
|
203
|
+
const message = typeof payload.message === "string" ? payload.message : "stream error";
|
|
204
|
+
const apiErr = new MeshyApiError({
|
|
205
|
+
message: `meshy stream ${status || "error"} on ${endpoint.streamPath(taskId)}: ${message}`,
|
|
206
|
+
status,
|
|
207
|
+
code: status ? codeForStatus(status) : "server",
|
|
208
|
+
path: endpoint.streamPath(taskId),
|
|
209
|
+
body: payload,
|
|
210
|
+
});
|
|
211
|
+
return finish("error", apiErr);
|
|
212
|
+
}
|
|
213
|
+
if (ev.event !== "message") {
|
|
214
|
+
opts.onUnknownEvent?.(ev);
|
|
215
|
+
return null;
|
|
216
|
+
}
|
|
217
|
+
let json;
|
|
218
|
+
try {
|
|
219
|
+
json = JSON.parse(ev.data);
|
|
220
|
+
}
|
|
221
|
+
catch {
|
|
222
|
+
return finish("protocol", new CliError({ code: "protocol", message: `stream message is not JSON: ${ev.data.slice(0, 200)}` }));
|
|
223
|
+
}
|
|
224
|
+
const parsed = TaskSchema.safeParse(json);
|
|
225
|
+
if (!parsed.success) {
|
|
226
|
+
return finish("protocol", new CliError({ code: "protocol", message: `stream message is not a task: ${parsed.error.message}` }));
|
|
227
|
+
}
|
|
228
|
+
state.task = parsed.data;
|
|
229
|
+
state.raw = json;
|
|
230
|
+
state.events += 1;
|
|
231
|
+
await opts.onTask?.(parsed.data, json);
|
|
232
|
+
if (isTerminalStatus(parsed.data.status))
|
|
233
|
+
return finish("terminal");
|
|
234
|
+
return null;
|
|
235
|
+
};
|
|
236
|
+
for (;;) {
|
|
237
|
+
let chunk;
|
|
238
|
+
try {
|
|
239
|
+
chunk = await reader.read();
|
|
240
|
+
}
|
|
241
|
+
catch (err) {
|
|
242
|
+
if (signal.aborted)
|
|
243
|
+
return finish(classifyAbort());
|
|
244
|
+
return finish("disconnected", new CliError({ code: "network", message: `stream disconnected: ${err instanceof Error ? err.message : String(err)}` }));
|
|
245
|
+
}
|
|
246
|
+
if (signal.aborted)
|
|
247
|
+
return finish(classifyAbort());
|
|
248
|
+
if (chunk.done) {
|
|
249
|
+
for (const ev of parser.end()) {
|
|
250
|
+
const out = await handleEvent(ev);
|
|
251
|
+
if (out)
|
|
252
|
+
return out;
|
|
253
|
+
}
|
|
254
|
+
if (state.task === null)
|
|
255
|
+
return finish("protocol", new CliError({ code: "protocol", message: "stream ended without any task event" }));
|
|
256
|
+
return finish("disconnected", new CliError({ code: "network", message: `stream ended before the task reached a terminal status (last status: ${state.task.status})` }));
|
|
257
|
+
}
|
|
258
|
+
resetIdle(); // any bytes — keep-alives, comments, partial lines — count as liveness
|
|
259
|
+
let parsedEvents;
|
|
260
|
+
try {
|
|
261
|
+
parsedEvents = parser.feed(chunk.value);
|
|
262
|
+
}
|
|
263
|
+
catch (err) {
|
|
264
|
+
return finish("protocol", err instanceof CliError ? err : new CliError({ code: "protocol", message: String(err) }));
|
|
265
|
+
}
|
|
266
|
+
for (const ev of parsedEvents) {
|
|
267
|
+
const out = await handleEvent(ev);
|
|
268
|
+
if (out)
|
|
269
|
+
return out;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
finally {
|
|
274
|
+
clearTimeout(totalTimer);
|
|
275
|
+
if (idleTimer)
|
|
276
|
+
clearTimeout(idleTimer);
|
|
277
|
+
handle?.close();
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/internal/stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,38 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Factory that wires the uniform get/list/
|
|
3
|
-
* any
|
|
4
|
-
* unique create
|
|
2
|
+
* Factory that wires the uniform create/get/list/wait/stream/delete
|
|
3
|
+
* subcommands for any registered task resource. Per-resource modules only
|
|
4
|
+
* contribute their unique `create` flag shape and payload validation.
|
|
5
|
+
*
|
|
6
|
+
* Two output schemas share one execution path:
|
|
7
|
+
* legacy — the 0.2.0 payloads and `-o` status report, with two documented
|
|
8
|
+
* fixes: `get` of a non-terminal task exits 0, and async create
|
|
9
|
+
* never polls.
|
|
10
|
+
* v1 — one `meshy.cli/v1` envelope whose result carries the TaskView,
|
|
11
|
+
* the submission record and the download manifest.
|
|
12
|
+
*
|
|
13
|
+
* Money rules enforced here, independent of schema:
|
|
14
|
+
* - every create is exactly one POST, journaled before it is sent;
|
|
15
|
+
* - a lost or malformed response is `submission_unknown` (exit 10), never a
|
|
16
|
+
* retry and never a "please run it again" hint;
|
|
17
|
+
* - local targets that would fail after the POST (an existing --save-json
|
|
18
|
+
* file, an -o path outside the workspace, a missing --project) are checked
|
|
19
|
+
* before it, so a detectable conflict costs zero requests;
|
|
20
|
+
* - once the server has accepted a task, every later failure — saving JSON,
|
|
21
|
+
* polling, downloading, recording, a signal — still reports that task id,
|
|
22
|
+
* the submission record and the `get`/`wait` commands that resume it;
|
|
23
|
+
* - SIGINT stops waiting/streaming (exit 130) and never deletes anything.
|
|
5
24
|
*/
|
|
6
25
|
import { Command } from "commander";
|
|
7
26
|
import type { TaskEndpoint } from "../client/endpoints/base.js";
|
|
8
|
-
import type { MeshyClient
|
|
9
|
-
import { type
|
|
27
|
+
import type { MeshyClient } from "../client/index.js";
|
|
28
|
+
import { type TaskResourceDescriptor } from "../client/resource-registry.js";
|
|
10
29
|
import { type Task } from "../client/types.js";
|
|
30
|
+
import { type SavedJson } from "./command-helpers.js";
|
|
31
|
+
import { CliError, type Warning } from "./errors.js";
|
|
32
|
+
import type { MaterialLinkReport } from "./material-links.js";
|
|
33
|
+
import { type Runtime } from "./runtime.js";
|
|
34
|
+
import { type TaskView } from "./task-view.js";
|
|
35
|
+
import { type AuthorisedRoot } from "./paths.js";
|
|
11
36
|
export interface CreateSpec {
|
|
12
37
|
description: string;
|
|
13
38
|
/** Attach resource-specific flags; return a structured payload. */
|
|
@@ -20,20 +45,112 @@ export interface CreateSpec {
|
|
|
20
45
|
* not throw (validation belongs in toPayload).
|
|
21
46
|
*/
|
|
22
47
|
toDefaults?(opts: Record<string, unknown>): Record<string, unknown>;
|
|
48
|
+
/**
|
|
49
|
+
* Payload keys holding nested option objects that must merge field by field
|
|
50
|
+
* across defaults < --data < flags (e.g. Creative Lab `options`, `output`).
|
|
51
|
+
* Everything else merges shallowly: arrays and scalars replace wholesale.
|
|
52
|
+
*/
|
|
53
|
+
nestedObjectKeys?: readonly string[];
|
|
54
|
+
/**
|
|
55
|
+
* Validate the merged payload (defaults < --data < flags) before media is
|
|
56
|
+
* normalised and before anything is sent. Throw UsageError / CliError.
|
|
57
|
+
*/
|
|
58
|
+
validatePayload?(payload: Record<string, unknown>, opts: Record<string, unknown>): void;
|
|
23
59
|
}
|
|
24
60
|
export interface ResourceCommandSpec {
|
|
25
|
-
|
|
61
|
+
/** Registry id of the task resource this command drives. */
|
|
62
|
+
name: string;
|
|
63
|
+
/** Commander name when it differs from the id (Creative Lab stages). */
|
|
64
|
+
commandName?: string;
|
|
65
|
+
/** Dotted prefix for v1 `command` (defaults to the id). */
|
|
66
|
+
commandPrefix?: string;
|
|
26
67
|
description: string;
|
|
27
68
|
supportsList?: boolean;
|
|
69
|
+
/** Default output schema for this resource's verbs (`legacy` for 0.2.0 commands). */
|
|
70
|
+
defaultSchema?: "legacy" | "v1";
|
|
28
71
|
create: CreateSpec;
|
|
29
|
-
|
|
72
|
+
/** Optional override; defaults to the registry endpoint for `name`. */
|
|
73
|
+
endpointOf?(client: MeshyClient): TaskEndpoint;
|
|
74
|
+
}
|
|
75
|
+
export interface DownloadOutcome {
|
|
76
|
+
state: "not_requested" | "not_ready" | "completed" | "partial" | "failed";
|
|
77
|
+
files: Array<{
|
|
78
|
+
key?: string;
|
|
79
|
+
path: string;
|
|
80
|
+
status: "written" | "failed";
|
|
81
|
+
bytes?: number;
|
|
82
|
+
sha256?: string;
|
|
83
|
+
error?: string | null;
|
|
84
|
+
}>;
|
|
85
|
+
metadata_path: string | null;
|
|
86
|
+
/** OBJ/MTL/texture reference report when the download contained a text OBJ. */
|
|
87
|
+
material_links?: MaterialLinkReport | null;
|
|
88
|
+
/** Set when the transfers landed but a later step (relink | digest | sidecar) failed or was interrupted. */
|
|
89
|
+
failed_step?: string;
|
|
90
|
+
}
|
|
91
|
+
export interface SubmissionInfo {
|
|
92
|
+
state: string;
|
|
93
|
+
operation_id: string | null;
|
|
94
|
+
task_id?: string | null;
|
|
95
|
+
request_id?: string | null;
|
|
30
96
|
}
|
|
97
|
+
interface TaskResultOptions {
|
|
98
|
+
task: Task | null;
|
|
99
|
+
raw: unknown;
|
|
100
|
+
descriptor: TaskResourceDescriptor;
|
|
101
|
+
includeRaw: boolean;
|
|
102
|
+
submission: SubmissionInfo;
|
|
103
|
+
downloads?: DownloadOutcome;
|
|
104
|
+
savedJson?: SavedJson | null;
|
|
105
|
+
extra?: Record<string, unknown>;
|
|
106
|
+
}
|
|
107
|
+
declare function taskResult(o: TaskResultOptions): Record<string, unknown>;
|
|
108
|
+
declare function nextCommands(descriptor: TaskResourceDescriptor, taskId: string): Record<string, string>;
|
|
109
|
+
/**
|
|
110
|
+
* Re-throw any error as a CliError whose `result` carries `result` — keeping
|
|
111
|
+
* the original classification (code, HTTP status, hint, recovery, exit code).
|
|
112
|
+
* A CliError's own partial result (files written so far, a failed download
|
|
113
|
+
* manifest) is merged on top, so nothing already known is lost.
|
|
114
|
+
*/
|
|
115
|
+
export declare function wrapWithResult(err: unknown, result: Record<string, unknown>): CliError;
|
|
116
|
+
/** `-o` target: inside the workspace (or its own directory), no symlink leaf, not an existing file. */
|
|
117
|
+
export declare function preflightOutputPath(output: string, workspace: string | AuthorisedRoot | undefined, cwd?: string): void;
|
|
118
|
+
/** `--save-json` target: inside the workspace (or its own directory), no symlink leaf, not an existing file. */
|
|
119
|
+
export declare function preflightSaveJsonPath(target: string, workspace: string | AuthorisedRoot | undefined, cwd?: string): void;
|
|
31
120
|
export declare function buildResourceCommand(spec: ResourceCommandSpec): Command;
|
|
121
|
+
export interface Submitted {
|
|
122
|
+
taskId: string;
|
|
123
|
+
raw: unknown;
|
|
124
|
+
requestId: string | null;
|
|
125
|
+
operationId: string;
|
|
126
|
+
warnings: Warning[];
|
|
127
|
+
}
|
|
128
|
+
export interface SubmitContext {
|
|
129
|
+
/** Names the request in messages, e.g. "make: the text-to-3d preview (geometry) request". */
|
|
130
|
+
label?: string;
|
|
131
|
+
/** Extra keys carried in every failure result (e.g. `{ step: 1 }`). */
|
|
132
|
+
extraResult?: Record<string, unknown>;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* The credential identity a submission is journaled under: bound to the key
|
|
136
|
+
* digest, the OAuth subject or the OAuth login id. `verified` is false when
|
|
137
|
+
* none of those exists (a pre-login-id OAuth profile): such a credential may
|
|
138
|
+
* start operations but is refused a replay of an existing record.
|
|
139
|
+
*/
|
|
140
|
+
export declare function credentialIdentityFor(runtime: Runtime, apiOrigin: string): {
|
|
141
|
+
fingerprint: string;
|
|
142
|
+
verified: boolean;
|
|
143
|
+
};
|
|
32
144
|
/**
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
145
|
+
* Journal → single POST → journal update. Every failure path leaves a record
|
|
146
|
+
* that says what is known; the unknown state is reported as exit 10 with the
|
|
147
|
+
* operation id and never as a suggestion to submit again. Shared by the
|
|
148
|
+
* resource commands and `make`, so there is exactly one submission state
|
|
149
|
+
* machine.
|
|
37
150
|
*/
|
|
151
|
+
export declare function submitCreate(runtime: Runtime, descriptor: TaskResourceDescriptor, endpoint: TaskEndpoint, payload: Record<string, unknown>, requestedOperationId: string | null, ctx?: SubmitContext): Promise<Submitted>;
|
|
152
|
+
/** Kept for make.ts (legacy path). */
|
|
38
153
|
export declare function emitTerminalOutcome(task: Task, timedOut: boolean, elapsedSeconds: number | undefined, resourceName: string, runtime: Runtime): Promise<void>;
|
|
154
|
+
export { taskResult as buildTaskResult, nextCommands as taskNextCommands };
|
|
155
|
+
export type { TaskView };
|
|
39
156
|
//# sourceMappingURL=task-command.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-command.d.ts","sourceRoot":"","sources":["../../src/internal/task-command.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"task-command.d.ts","sourceRoot":"","sources":["../../src/internal/task-command.ts"],"names":[],"mappings":"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"}
|