@meshy-ai/cli 0.3.2 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +1 -1
- package/README.md +69 -581
- package/dist/cmd/auth.d.ts.map +1 -1
- package/dist/cmd/auth.js +14 -12
- package/dist/cmd/auth.js.map +1 -1
- package/dist/cmd/download.d.ts.map +1 -1
- package/dist/cmd/download.js +3 -2
- package/dist/cmd/download.js.map +1 -1
- package/dist/cmd/make.d.ts.map +1 -1
- package/dist/cmd/make.js +26 -10
- package/dist/cmd/make.js.map +1 -1
- package/dist/cmd/multi-image-to-3d.d.ts +10 -3
- package/dist/cmd/multi-image-to-3d.d.ts.map +1 -1
- package/dist/cmd/multi-image-to-3d.js +17 -6
- package/dist/cmd/multi-image-to-3d.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -8
- package/dist/index.js.map +1 -1
- package/dist/internal/color.d.ts +1 -1
- package/dist/internal/color.d.ts.map +1 -1
- package/dist/internal/color.js +13 -1
- package/dist/internal/color.js.map +1 -1
- package/dist/internal/context.d.ts +5 -0
- package/dist/internal/context.d.ts.map +1 -1
- package/dist/internal/context.js +5 -0
- package/dist/internal/context.js.map +1 -1
- package/dist/internal/errors.d.ts.map +1 -1
- package/dist/internal/errors.js +8 -3
- package/dist/internal/errors.js.map +1 -1
- package/dist/internal/logger.d.ts.map +1 -1
- package/dist/internal/logger.js +2 -0
- package/dist/internal/logger.js.map +1 -1
- package/dist/internal/output.d.ts +7 -0
- package/dist/internal/output.d.ts.map +1 -1
- package/dist/internal/output.js +23 -2
- package/dist/internal/output.js.map +1 -1
- package/dist/internal/progress.d.ts +62 -0
- package/dist/internal/progress.d.ts.map +1 -0
- package/dist/internal/progress.js +198 -0
- package/dist/internal/progress.js.map +1 -0
- package/dist/internal/runtime.d.ts +13 -0
- package/dist/internal/runtime.d.ts.map +1 -1
- package/dist/internal/runtime.js +17 -2
- package/dist/internal/runtime.js.map +1 -1
- package/dist/internal/task-command.d.ts +0 -1
- package/dist/internal/task-command.d.ts.map +1 -1
- package/dist/internal/task-command.js +40 -10
- package/dist/internal/task-command.js.map +1 -1
- package/dist/internal/update-notifier.d.ts +2 -0
- package/dist/internal/update-notifier.d.ts.map +1 -1
- package/dist/internal/update-notifier.js +1 -1
- package/dist/internal/update-notifier.js.map +1 -1
- package/dist/internal/views.d.ts +57 -0
- package/dist/internal/views.d.ts.map +1 -0
- package/dist/internal/views.js +570 -0
- package/dist/internal/views.js.map +1 -0
- package/dist/root.d.ts.map +1 -1
- package/dist/root.js +3 -0
- package/dist/root.js.map +1 -1
- package/package.json +1 -1
- package/skills/meshy-cli/SKILL.md +12 -5
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Progress on stderr while a task runs.
|
|
3
|
+
*
|
|
4
|
+
* The mode follows where stderr goes, never a flag:
|
|
5
|
+
* - live: stderr is a terminal (not CI, not TERM=dumb). One line is redrawn
|
|
6
|
+
* in place — spinner, status, clock — and frozen as a ✓ / ✗ line
|
|
7
|
+
* when the step ends, so finished steps stay on screen.
|
|
8
|
+
* - lines: anything else (agents, CI, `2> log`). One plain line per step
|
|
9
|
+
* start, per status or percentage change, and per step end. Same
|
|
10
|
+
* text 0.3.x printed, minus the repeat on every poll.
|
|
11
|
+
* - off: `--format ndjson`: its consumers read events, and stderr stays quiet.
|
|
12
|
+
*
|
|
13
|
+
* Only stderr is ever written. Nothing here is a machine contract — the skill
|
|
14
|
+
* docs tell agents never to scrape it.
|
|
15
|
+
*/
|
|
16
|
+
import { painterFor } from "./color.js";
|
|
17
|
+
import { formatDuration } from "./views.js";
|
|
18
|
+
import { CI_VARS } from "./update-notifier.js";
|
|
19
|
+
export function progressMode(format, stream = process.stderr, env = process.env) {
|
|
20
|
+
if (format === "ndjson")
|
|
21
|
+
return "off";
|
|
22
|
+
if (!stream.isTTY || env["TERM"] === "dumb" || CI_VARS.some((v) => env[v]))
|
|
23
|
+
return "lines";
|
|
24
|
+
return "live";
|
|
25
|
+
}
|
|
26
|
+
const FRAMES = "⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏";
|
|
27
|
+
const ERASE = "\r\u001b[2K";
|
|
28
|
+
/** The progress that currently owns the live line, so other stderr writers can clear it first. */
|
|
29
|
+
let active = null;
|
|
30
|
+
export function clearActiveProgress() {
|
|
31
|
+
active?.clear();
|
|
32
|
+
}
|
|
33
|
+
export function stopActiveProgress() {
|
|
34
|
+
active?.stop();
|
|
35
|
+
}
|
|
36
|
+
export function createProgress(format, opts = {}) {
|
|
37
|
+
const stream = opts.stream ?? process.stderr;
|
|
38
|
+
const env = opts.env ?? process.env;
|
|
39
|
+
const now = opts.now ?? (() => performance.now());
|
|
40
|
+
let mode = progressMode(format, stream, env);
|
|
41
|
+
if (opts.liveOnly && mode === "lines")
|
|
42
|
+
mode = "off";
|
|
43
|
+
const paint = painterFor(stream, env);
|
|
44
|
+
let step = null;
|
|
45
|
+
let startedAt = 0;
|
|
46
|
+
let status = null;
|
|
47
|
+
let pct = null;
|
|
48
|
+
let frame = 0;
|
|
49
|
+
let timer = null;
|
|
50
|
+
const elapsed = () => (now() - startedAt) / 1000;
|
|
51
|
+
// `||`: a pty with no size reports 0 columns. One column is kept free so
|
|
52
|
+
// the cursor never wraps — a wrapped line cannot be redrawn with \r.
|
|
53
|
+
const width = () => (stream.columns || 80) - 1;
|
|
54
|
+
const draw = () => {
|
|
55
|
+
if (!step)
|
|
56
|
+
return;
|
|
57
|
+
const cols = width();
|
|
58
|
+
const clock = formatDuration(elapsed()).padStart(CLOCK_WIDTH);
|
|
59
|
+
const right = [];
|
|
60
|
+
// A step with a task behind it gets a bar; a bare spinner (download, login) only a clock.
|
|
61
|
+
if (step.resource) {
|
|
62
|
+
const barWidth = cols >= 70 ? 20 : cols >= 50 ? 10 : 0;
|
|
63
|
+
if (barWidth)
|
|
64
|
+
right.push(...bar(pct ?? 0, barWidth), [" ", null]);
|
|
65
|
+
right.push([statusText(status, pct).padStart(STATUS_WIDTH), null], [" ", null]);
|
|
66
|
+
}
|
|
67
|
+
right.push([clock, "dim"]);
|
|
68
|
+
stream.write(`${ERASE}${row(paint, [[FRAMES[frame % FRAMES.length], "brand"], [" ", null]], step.label, right, cols, true)}`);
|
|
69
|
+
};
|
|
70
|
+
const halt = () => {
|
|
71
|
+
if (timer)
|
|
72
|
+
clearInterval(timer);
|
|
73
|
+
timer = null;
|
|
74
|
+
if (active === self)
|
|
75
|
+
active = null;
|
|
76
|
+
};
|
|
77
|
+
const self = {
|
|
78
|
+
mode,
|
|
79
|
+
start(next) {
|
|
80
|
+
if (mode === "off")
|
|
81
|
+
return;
|
|
82
|
+
if (step)
|
|
83
|
+
self.stop();
|
|
84
|
+
step = next;
|
|
85
|
+
startedAt = now();
|
|
86
|
+
status = null;
|
|
87
|
+
pct = null;
|
|
88
|
+
if (mode === "lines") {
|
|
89
|
+
stream.write(`${next.label}${next.taskId ? ` ${next.taskId}` : ""}\n`);
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
active = self;
|
|
93
|
+
draw();
|
|
94
|
+
timer = setInterval(() => {
|
|
95
|
+
frame += 1;
|
|
96
|
+
draw();
|
|
97
|
+
}, opts.intervalMs ?? 100);
|
|
98
|
+
timer.unref?.();
|
|
99
|
+
},
|
|
100
|
+
tick(nextStatus, nextPct) {
|
|
101
|
+
if (!step)
|
|
102
|
+
return;
|
|
103
|
+
const s = nextStatus ?? null;
|
|
104
|
+
const p = typeof nextPct === "number" ? nextPct : null;
|
|
105
|
+
if (s === status && p === pct)
|
|
106
|
+
return;
|
|
107
|
+
status = s;
|
|
108
|
+
pct = p;
|
|
109
|
+
if (mode === "lines") {
|
|
110
|
+
if (s)
|
|
111
|
+
stream.write(`[${step.resource}] ${s}${p !== null ? ` ${p}%` : ""}\n`);
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
draw();
|
|
115
|
+
},
|
|
116
|
+
finish(outcome, detail) {
|
|
117
|
+
if (!step)
|
|
118
|
+
return;
|
|
119
|
+
const took = elapsed();
|
|
120
|
+
const done = step;
|
|
121
|
+
step = null;
|
|
122
|
+
halt();
|
|
123
|
+
if (mode === "lines") {
|
|
124
|
+
const word = outcome === "ok" ? "ok" : detail ?? (outcome === "timeout" ? "timed out" : "failed");
|
|
125
|
+
stream.write(` ${word} in ${took.toFixed(0)}s\n`);
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
const icon = outcome === "ok" ? ["✓", "green"] : outcome === "timeout" ? ["!", "yellow"] : ["✗", "red"];
|
|
129
|
+
const right = [];
|
|
130
|
+
if (done.taskId)
|
|
131
|
+
right.push([done.taskId, "dim"], [" ", null]);
|
|
132
|
+
if (outcome !== "ok")
|
|
133
|
+
right.push([detail ?? (outcome === "timeout" ? "timed out" : "failed"), outcome === "timeout" ? "yellow" : "red"], [" ", null]);
|
|
134
|
+
right.push([formatDuration(took).padStart(CLOCK_WIDTH), "dim"]);
|
|
135
|
+
// The frozen line keeps the full label and id; it may wrap, it is never redrawn.
|
|
136
|
+
stream.write(`${ERASE}${row(paint, [icon, [" ", null]], done.label, right, width(), false)}\n`);
|
|
137
|
+
},
|
|
138
|
+
clear() {
|
|
139
|
+
if (step && mode === "live")
|
|
140
|
+
stream.write(ERASE);
|
|
141
|
+
},
|
|
142
|
+
stop() {
|
|
143
|
+
if (!step)
|
|
144
|
+
return;
|
|
145
|
+
self.clear();
|
|
146
|
+
step = null;
|
|
147
|
+
halt();
|
|
148
|
+
},
|
|
149
|
+
};
|
|
150
|
+
return self;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Run `fn` under a live-only spinner (downloads). The spinner is erased, not
|
|
154
|
+
* frozen: the result view lists what was saved. Agents and logs see nothing new.
|
|
155
|
+
*/
|
|
156
|
+
export async function withSpinner(format, label, fn) {
|
|
157
|
+
const progress = createProgress(format, { liveOnly: true });
|
|
158
|
+
progress.start({ label, resource: "" });
|
|
159
|
+
try {
|
|
160
|
+
return await fn();
|
|
161
|
+
}
|
|
162
|
+
finally {
|
|
163
|
+
progress.stop();
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/** `[######--------]`, filled in proportion to the percentage. */
|
|
167
|
+
function bar(pct, width) {
|
|
168
|
+
const filled = Math.round((Math.min(100, Math.max(0, pct)) / 100) * width);
|
|
169
|
+
return [["[", "dim"], ["#".repeat(filled), "brand"], ["-".repeat(width - filled), "dim"], ["]", "dim"]];
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* `prefix label ······ right`, with `right` flush against column `cols`.
|
|
173
|
+
* Widths are measured on the plain text, then painted, so escapes never skew
|
|
174
|
+
* them. `fit` truncates the label rather than let the row exceed `cols`.
|
|
175
|
+
*/
|
|
176
|
+
function row(paint, prefix, label, right, cols, fit) {
|
|
177
|
+
const len = (segs) => segs.reduce((n, [t]) => n + t.length, 0);
|
|
178
|
+
const fixed = len(prefix) + 2 + len(right);
|
|
179
|
+
let text = label;
|
|
180
|
+
if (fit && fixed + text.length > cols)
|
|
181
|
+
text = `${text.slice(0, Math.max(1, cols - fixed - 1))}…`;
|
|
182
|
+
const gap = " ".repeat(Math.max(2, cols - fixed - text.length + 2));
|
|
183
|
+
const draw = (segs) => segs.map(([t, style]) => (style ? paint(t, style) : t)).join("");
|
|
184
|
+
return `${draw(prefix)}${text}${gap}${draw(right)}`;
|
|
185
|
+
}
|
|
186
|
+
/** Fixed widths so the columns do not jiggle as the numbers change. */
|
|
187
|
+
const STATUS_WIDTH = 9; // "succeeded", "running", "queued", "42%"
|
|
188
|
+
const CLOCK_WIDTH = 7; // "59m 59s"
|
|
189
|
+
function statusText(status, pct) {
|
|
190
|
+
if (status === null)
|
|
191
|
+
return ""; // before the first status (and spinners that never get one): just the clock
|
|
192
|
+
if (status === "PENDING")
|
|
193
|
+
return "queued";
|
|
194
|
+
if (status === "IN_PROGRESS")
|
|
195
|
+
return pct !== null ? `${pct}%` : "running";
|
|
196
|
+
return status.toLowerCase().replace(/_/g, " ");
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=progress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/internal/progress.ts"],"names":[],"mappings":"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"}
|
|
@@ -87,6 +87,19 @@ export declare function buildRuntime(flags: GlobalFlags): Promise<Runtime>;
|
|
|
87
87
|
export declare function buildLocalRuntime(flags: GlobalFlags): LocalRuntime;
|
|
88
88
|
/** Pull the resolved global flags from the top-level command. */
|
|
89
89
|
export declare function readGlobalFlags(cmd: Command): GlobalFlags;
|
|
90
|
+
/**
|
|
91
|
+
* `--json` wins; a typed `--format` is honoured; untyped follows the TTY.
|
|
92
|
+
*
|
|
93
|
+
* D-065: an untyped format with a typed `--output-schema v1` is JSON even on a
|
|
94
|
+
* TTY. No person types a schema version — that is a machine asking for the
|
|
95
|
+
* envelope (an agent in a pseudo-terminal, or copying a skill example). It
|
|
96
|
+
* leaves formatExplicit false, so `-o` keeps its own rule.
|
|
97
|
+
*/
|
|
98
|
+
export declare function resolveFormat(opts: {
|
|
99
|
+
format?: string;
|
|
100
|
+
json?: boolean;
|
|
101
|
+
outputSchema?: string;
|
|
102
|
+
}, isTTY?: boolean): OutputFormat;
|
|
90
103
|
/**
|
|
91
104
|
* Decide which stdout data model a command uses.
|
|
92
105
|
* - `legacy` commands (everything 0.2.0 shipped) default to legacy and opt
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/internal/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAc,KAAK,eAAe,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAKjF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/internal/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAc,KAAK,eAAe,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAKjF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAA0C,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AACxF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,MAAM,EAAE,YAAY,CAAC;IACrB,iGAAiG;IACjG,cAAc,EAAE,OAAO,CAAC;IACxB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uHAAuH;IACvH,aAAa,CAAC,EAAE,cAAc,CAAC;IAC/B,8CAA8C;IAC9C,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;CAC7B;AAKD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,8BAA8B,CAClD,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,eAAe,GACzB,OAAO,CAAC,WAAW,CAAC,CA6EtB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,GAAG,eAAe,CASvE;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAKvE;AAED,uEAAuE;AACvE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,YAAY,CAQlE;AAED,iEAAiE;AACjE,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW,CA6CzD;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,EAChE,KAAK,GAAE,OAAuC,GAC7C,YAAY,CAId;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,GAAG,YAAY,CAQ5F"}
|
package/dist/internal/runtime.js
CHANGED
|
@@ -17,7 +17,7 @@ import { credentialsPath, readCredentials, saveProfile } from "./credentials.js"
|
|
|
17
17
|
import { authRequiredError, UsageError } from "./errors.js";
|
|
18
18
|
import { logger, setLogLevel } from "./logger.js";
|
|
19
19
|
import { refreshTokens } from "./oauth.js";
|
|
20
|
-
import { parseOutputFormat } from "./output.js";
|
|
20
|
+
import { defaultOutputFormat, parseOutputFormat } from "./output.js";
|
|
21
21
|
/** 60-second skew window: refresh if token expires within this many ms. */
|
|
22
22
|
const REFRESH_SKEW_MS = 60_000;
|
|
23
23
|
/**
|
|
@@ -156,7 +156,7 @@ export function readGlobalFlags(cmd) {
|
|
|
156
156
|
// was untyped, because a file write must stay JSON no matter what the
|
|
157
157
|
// terminal would have shown.
|
|
158
158
|
const formatExplicit = opts.json === true || opts.format !== undefined;
|
|
159
|
-
const format =
|
|
159
|
+
const format = resolveFormat(opts);
|
|
160
160
|
return {
|
|
161
161
|
apiKey: opts.apiKey,
|
|
162
162
|
baseUrlV1: opts.baseUrlV1,
|
|
@@ -175,6 +175,21 @@ export function readGlobalFlags(cmd) {
|
|
|
175
175
|
logLevel: normalizeLogLevel(opts.logLevel),
|
|
176
176
|
};
|
|
177
177
|
}
|
|
178
|
+
/**
|
|
179
|
+
* `--json` wins; a typed `--format` is honoured; untyped follows the TTY.
|
|
180
|
+
*
|
|
181
|
+
* D-065: an untyped format with a typed `--output-schema v1` is JSON even on a
|
|
182
|
+
* TTY. No person types a schema version — that is a machine asking for the
|
|
183
|
+
* envelope (an agent in a pseudo-terminal, or copying a skill example). It
|
|
184
|
+
* leaves formatExplicit false, so `-o` keeps its own rule.
|
|
185
|
+
*/
|
|
186
|
+
export function resolveFormat(opts, isTTY = Boolean(process.stdout.isTTY)) {
|
|
187
|
+
if (opts.json)
|
|
188
|
+
return "json";
|
|
189
|
+
if (opts.format === undefined)
|
|
190
|
+
return opts.outputSchema?.toLowerCase() === "v1" ? "json" : defaultOutputFormat(isTTY);
|
|
191
|
+
return parseOutputFormat(opts.format);
|
|
192
|
+
}
|
|
178
193
|
/**
|
|
179
194
|
* Decide which stdout data model a command uses.
|
|
180
195
|
* - `legacy` commands (everything 0.2.0 shipped) default to legacy and opt
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/internal/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,UAAU,EAAuB,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAA0C,MAAM,aAAa,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAqB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/internal/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -149,7 +149,6 @@ export declare function credentialIdentityFor(runtime: Runtime, apiOrigin: strin
|
|
|
149
149
|
* machine.
|
|
150
150
|
*/
|
|
151
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). */
|
|
153
152
|
export declare function emitTerminalOutcome(task: Task, timedOut: boolean, elapsedSeconds: number | undefined, resourceName: string, runtime: Runtime): Promise<void>;
|
|
154
153
|
export { taskResult as buildTaskResult, nextCommands as taskNextCommands };
|
|
155
154
|
export type { TaskView };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-command.d.ts","sourceRoot":"","sources":["../../src/internal/task-command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAuB,KAAK,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAElG,OAAO,EAAmC,KAAK,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAmF,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGvI,OAAO,EAAiB,QAAQ,EAAc,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAGhF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"task-command.d.ts","sourceRoot":"","sources":["../../src/internal/task-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,12 +34,15 @@ import { classifyError, CliError, UsageError } from "./errors.js";
|
|
|
34
34
|
import { normalizeMediaPayload } from "./file-input.js";
|
|
35
35
|
import { logger } from "./logger.js";
|
|
36
36
|
import { mergeNestedObjects, mergePayload, parseJsonFlag } from "./payload.js";
|
|
37
|
+
import { painterFor } from "./color.js";
|
|
38
|
+
import { taskCard } from "./views.js";
|
|
37
39
|
import { emitEnvelope, emitStreamEvent, emit } from "./output.js";
|
|
38
40
|
import { parseTimeoutSeconds, pollUntilTerminal } from "./poll.js";
|
|
41
|
+
import { createProgress, withSpinner } from "./progress.js";
|
|
39
42
|
import { printReport } from "./report.js";
|
|
40
43
|
import { errorEnvelope, okEnvelope, warning } from "./result.js";
|
|
41
44
|
import { buildRuntime } from "./runtime.js";
|
|
42
|
-
import { getUpdateNotice } from "./update-notifier.js";
|
|
45
|
+
import { getUpdateNotice, printHumanUpdateHint } from "./update-notifier.js";
|
|
43
46
|
import { streamTask } from "./stream.js";
|
|
44
47
|
import { toTaskView } from "./task-view.js";
|
|
45
48
|
import { beginOperation, credentialBinding, credentialFingerprint, newOperationId, operationsRoot, payloadFingerprint, updateOperation, } from "./operation-store.js";
|
|
@@ -700,7 +703,7 @@ async function maybeDownloadV1(opened, descriptor, task, raw, submission, warnin
|
|
|
700
703
|
if (task.status !== "SUCCEEDED")
|
|
701
704
|
return { state: "not_ready", files: [], metadata_path: null };
|
|
702
705
|
try {
|
|
703
|
-
const { files, metadataPath, materialLinks } = await downloadArtifacts(task, output, descriptor.id, { root: opened.flags.workspaceRoot, signal: abortSignal() });
|
|
706
|
+
const { files, metadataPath, materialLinks } = await withSpinner(opened.format, "Downloading assets", () => downloadArtifacts(task, output, descriptor.id, { root: opened.flags.workspaceRoot, signal: abortSignal() }));
|
|
704
707
|
if (materialLinks)
|
|
705
708
|
warnings.push(...materialLinks.warnings);
|
|
706
709
|
return {
|
|
@@ -748,6 +751,8 @@ async function waitAndReport(opened, runtime, descriptor, endpoint, taskId, time
|
|
|
748
751
|
// A holder (not a bare `let`) so the callback's assignment is visible to the
|
|
749
752
|
// catch block without TypeScript narrowing it away.
|
|
750
753
|
const seen = { last: null, polls: 0 };
|
|
754
|
+
const progress = createProgress(opened.format);
|
|
755
|
+
progress.start({ label: `${descriptor.id} ${taskId}`, resource: descriptor.id });
|
|
751
756
|
let poll;
|
|
752
757
|
try {
|
|
753
758
|
poll = await pollUntilTerminal(endpoint, taskId, {
|
|
@@ -758,13 +763,12 @@ async function waitAndReport(opened, runtime, descriptor, endpoint, taskId, time
|
|
|
758
763
|
onTick: (task, raw) => {
|
|
759
764
|
seen.last = { task, raw };
|
|
760
765
|
seen.polls += 1;
|
|
761
|
-
|
|
762
|
-
process.stderr.write(`[${descriptor.id}] ${task.status}${typeof task.progress === "number" ? ` ${task.progress}%` : ""}\n`);
|
|
763
|
-
}
|
|
766
|
+
progress.tick(task.status, task.progress);
|
|
764
767
|
},
|
|
765
768
|
});
|
|
766
769
|
}
|
|
767
770
|
catch (err) {
|
|
771
|
+
progress.stop();
|
|
768
772
|
if (wasInterrupted() || abortSignal().aborted) {
|
|
769
773
|
throw interruptedError(descriptor, taskId, seen.last, submission, opts, opened);
|
|
770
774
|
}
|
|
@@ -784,6 +788,7 @@ async function waitAndReport(opened, runtime, descriptor, endpoint, taskId, time
|
|
|
784
788
|
const elapsed = (performance.now() - started) / 1000;
|
|
785
789
|
const { task, raw, timedOut, aborted } = poll;
|
|
786
790
|
const waitInfo = { timed_out: timedOut, elapsed_seconds: Number(elapsed.toFixed(2)), polls: poll.polls };
|
|
791
|
+
endProgress(progress, task, timedOut, aborted);
|
|
787
792
|
if (aborted)
|
|
788
793
|
throw interruptedError(descriptor, taskId, task ? { task, raw } : seen.last, submission, opts, opened);
|
|
789
794
|
if (task === null) {
|
|
@@ -873,6 +878,8 @@ async function streamAndReport(opened, runtime, descriptor, endpoint, taskId, ti
|
|
|
873
878
|
let sequence = 0;
|
|
874
879
|
const submission = { state: "accepted", operation_id: null };
|
|
875
880
|
const warnings = [];
|
|
881
|
+
const progress = createProgress(opened.format);
|
|
882
|
+
progress.start({ label: `${descriptor.id} ${taskId}`, resource: descriptor.id });
|
|
876
883
|
const outcome = await streamTask(endpoint, taskId, {
|
|
877
884
|
timeoutMs: timeoutSeconds * 1000,
|
|
878
885
|
idleTimeoutMs: idleSeconds * 1000,
|
|
@@ -881,6 +888,7 @@ async function streamAndReport(opened, runtime, descriptor, endpoint, taskId, ti
|
|
|
881
888
|
warnings.push(warning("unknown_sse_event", `ignored SSE event '${ev.event}'`));
|
|
882
889
|
},
|
|
883
890
|
onTask: async (task, raw) => {
|
|
891
|
+
progress.tick(task.status, task.progress);
|
|
884
892
|
if (opened.schema === "v1" && ndjson) {
|
|
885
893
|
sequence += 1;
|
|
886
894
|
const event = {
|
|
@@ -890,11 +898,9 @@ async function streamAndReport(opened, runtime, descriptor, endpoint, taskId, ti
|
|
|
890
898
|
};
|
|
891
899
|
await emitStreamEvent(event);
|
|
892
900
|
}
|
|
893
|
-
else if (opened.schema === "v1") {
|
|
894
|
-
process.stderr.write(`[${descriptor.id}] ${task.status}${typeof task.progress === "number" ? ` ${task.progress}%` : ""}\n`);
|
|
895
|
-
}
|
|
896
901
|
},
|
|
897
902
|
});
|
|
903
|
+
endProgress(progress, outcome.task, outcome.reason === "timeout", outcome.reason !== "terminal" && outcome.reason !== "timeout");
|
|
898
904
|
const streamInfo = { events: outcome.events, ended: outcome.reason, elapsed_seconds: Number((outcome.elapsedMs / 1000).toFixed(2)) };
|
|
899
905
|
const ctx = { descriptor, taskId, task: outcome.task, raw: outcome.raw, submission, includeRaw, extra: { stream: streamInfo, task_id: taskId } };
|
|
900
906
|
// Once the stream has started, every later step — saving JSON, recording the
|
|
@@ -1008,9 +1014,14 @@ function wrapStreamError(err, result, warnings) {
|
|
|
1008
1014
|
async function emitLegacyOutcome(task, timedOut, elapsedSeconds, resourceName, runtime, mode) {
|
|
1009
1015
|
const output = runtime.flags.output;
|
|
1010
1016
|
const succeeded = !timedOut && task.status === "SUCCEEDED";
|
|
1017
|
+
const pretty = runtime.flags.format === "pretty";
|
|
1011
1018
|
if (output) {
|
|
1012
1019
|
if (succeeded) {
|
|
1013
|
-
const { savedFiles, metadataPath } = await downloadArtifacts(task, output, resourceName, { root: runtime.flags.workspaceRoot, signal: abortSignal() });
|
|
1020
|
+
const { savedFiles, metadataPath } = await withSpinner(runtime.flags.format, "Downloading assets", () => downloadArtifacts(task, output, resourceName, { root: runtime.flags.workspaceRoot, signal: abortSignal() }));
|
|
1021
|
+
if (pretty) {
|
|
1022
|
+
printTaskCard(task, savedFiles);
|
|
1023
|
+
return;
|
|
1024
|
+
}
|
|
1014
1025
|
const successReport = {
|
|
1015
1026
|
status: "SUCCESS",
|
|
1016
1027
|
taskId: task.id,
|
|
@@ -1038,7 +1049,10 @@ async function emitLegacyOutcome(task, timedOut, elapsedSeconds, resourceName, r
|
|
|
1038
1049
|
const failNotice = getUpdateNotice();
|
|
1039
1050
|
if (failNotice)
|
|
1040
1051
|
report._notice = failNotice;
|
|
1041
|
-
|
|
1052
|
+
if (pretty)
|
|
1053
|
+
printTaskCard(task, []);
|
|
1054
|
+
else
|
|
1055
|
+
printReport(report);
|
|
1042
1056
|
if (timedOut)
|
|
1043
1057
|
process.exitCode = 8;
|
|
1044
1058
|
else if (mode.query && !isTerminalStatus(task.status))
|
|
@@ -1062,6 +1076,22 @@ async function emitLegacyOutcome(task, timedOut, elapsedSeconds, resourceName, r
|
|
|
1062
1076
|
process.exitCode = 1;
|
|
1063
1077
|
}
|
|
1064
1078
|
/** Kept for make.ts (legacy path). */
|
|
1079
|
+
/** The `-o` report for a person: the task card with the files it saved, the update hint on stderr. */
|
|
1080
|
+
function printTaskCard(task, saved) {
|
|
1081
|
+
process.stdout.write(`${taskCard(toTaskView(task), painterFor(process.stdout), { saved }).join("\n")}\n`);
|
|
1082
|
+
printHumanUpdateHint(getUpdateNotice(), process);
|
|
1083
|
+
}
|
|
1084
|
+
/** Freeze the progress line with how the wait or stream ended. */
|
|
1085
|
+
function endProgress(progress, task, timedOut, abandoned) {
|
|
1086
|
+
if (abandoned)
|
|
1087
|
+
progress.stop();
|
|
1088
|
+
else if (timedOut)
|
|
1089
|
+
progress.finish("timeout");
|
|
1090
|
+
else if (task?.status === "SUCCEEDED")
|
|
1091
|
+
progress.finish("ok");
|
|
1092
|
+
else
|
|
1093
|
+
progress.finish("failed", task?.status ?? "no status received");
|
|
1094
|
+
}
|
|
1065
1095
|
export async function emitTerminalOutcome(task, timedOut, elapsedSeconds, resourceName, runtime) {
|
|
1066
1096
|
await emitLegacyOutcome(task, timedOut, elapsedSeconds, resourceName, runtime, { query: false });
|
|
1067
1097
|
}
|