unity-mcp-cli 0.52.0 → 0.54.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/README.md +85 -66
- package/dist/commands/configure.js +17 -13
- package/dist/commands/configure.js.map +1 -1
- package/dist/commands/create-project.js +17 -5
- package/dist/commands/create-project.js.map +1 -1
- package/dist/commands/install-plugin.js +20 -6
- package/dist/commands/install-plugin.js.map +1 -1
- package/dist/commands/install-unity.d.ts +2 -0
- package/dist/commands/install-unity.js +72 -0
- package/dist/commands/install-unity.js.map +1 -0
- package/dist/commands/open.js +82 -10
- package/dist/commands/open.js.map +1 -1
- package/dist/commands/remove-plugin.d.ts +2 -0
- package/dist/commands/remove-plugin.js +29 -0
- package/dist/commands/remove-plugin.js.map +1 -0
- package/dist/index.js +34 -11
- package/dist/index.js.map +1 -1
- package/dist/utils/manifest.d.ts +12 -3
- package/dist/utils/manifest.js +53 -29
- package/dist/utils/manifest.js.map +1 -1
- package/dist/utils/ui.d.ts +70 -0
- package/dist/utils/ui.js +288 -0
- package/dist/utils/ui.js.map +1 -0
- package/dist/utils/unity-editor.d.ts +5 -0
- package/dist/utils/unity-editor.js +49 -3
- package/dist/utils/unity-editor.js.map +1 -1
- package/dist/utils/unity-hub.d.ts +29 -1
- package/dist/utils/unity-hub.js +291 -22
- package/dist/utils/unity-hub.js.map +1 -1
- package/docs/README.es.md +333 -0
- package/docs/README.ja.md +333 -0
- package/docs/README.zh-CN.md +333 -0
- package/package.json +3 -3
- package/dist/commands/connect.d.ts +0 -2
- package/dist/commands/connect.js +0 -81
- package/dist/commands/connect.js.map +0 -1
- package/dist/commands/install-editor.d.ts +0 -2
- package/dist/commands/install-editor.js +0 -49
- package/dist/commands/install-editor.js.map +0 -1
package/dist/utils/ui.js
ADDED
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import yoctoSpinner from 'yocto-spinner';
|
|
3
|
+
// --- Verbose mode ---
|
|
4
|
+
let verboseEnabled = false;
|
|
5
|
+
export function setVerbose(enabled) {
|
|
6
|
+
verboseEnabled = enabled;
|
|
7
|
+
}
|
|
8
|
+
export function verbose(msg) {
|
|
9
|
+
if (verboseEnabled) {
|
|
10
|
+
if (isTTY()) {
|
|
11
|
+
console.log(chalk.dim(`[verbose] ${msg}`));
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
console.log(`[verbose] ${msg}`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
// --- TTY detection ---
|
|
19
|
+
function isTTY() {
|
|
20
|
+
return !!process.stdout.isTTY;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Draw a Unicode rounded box around text with cyan borders.
|
|
24
|
+
*/
|
|
25
|
+
function drawBox(text) {
|
|
26
|
+
const lines = text.split('\n');
|
|
27
|
+
const padding = 2;
|
|
28
|
+
const maxLen = Math.max(...lines.map(l => stripAnsi(l).length));
|
|
29
|
+
const innerWidth = maxLen + padding * 2;
|
|
30
|
+
const pad = ' '.repeat(padding);
|
|
31
|
+
const top = chalk.cyan('╭' + '─'.repeat(innerWidth) + '╮');
|
|
32
|
+
const bottom = chalk.cyan('╰' + '─'.repeat(innerWidth) + '╯');
|
|
33
|
+
const middle = lines.map(l => {
|
|
34
|
+
const visible = stripAnsi(l).length;
|
|
35
|
+
const right = ' '.repeat(maxLen - visible);
|
|
36
|
+
return chalk.cyan('│') + pad + l + right + pad + chalk.cyan('│');
|
|
37
|
+
});
|
|
38
|
+
return [top, ...middle, bottom].join('\n');
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Strip ANSI escape codes from a string.
|
|
42
|
+
*/
|
|
43
|
+
function stripAnsi(str) {
|
|
44
|
+
// eslint-disable-next-line no-control-regex
|
|
45
|
+
return str.replace(/\x1B\[[0-9;]*m/g, '');
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Apply styled help formatting to a Commander command.
|
|
49
|
+
* Call this on every Command instance (root and subcommands)
|
|
50
|
+
* so that --help / -h always renders the fancy UI.
|
|
51
|
+
*
|
|
52
|
+
* @param appVersion - The CLI version string, shown in the root banner.
|
|
53
|
+
*/
|
|
54
|
+
export function configureStyledHelp(cmd, appVersion) {
|
|
55
|
+
cmd.configureHelp({
|
|
56
|
+
formatHelp(target, helper) {
|
|
57
|
+
const isRoot = !target.parent;
|
|
58
|
+
const lines = [];
|
|
59
|
+
// Banner for root, styled title for subcommands
|
|
60
|
+
if (isRoot && appVersion) {
|
|
61
|
+
lines.push(drawBox(`${chalk.bold.cyan('Unity-MCP CLI')} ${chalk.dim(`v${appVersion}`)}\n${chalk.dim('Bridge LLMs with Unity via Model Context Protocol')}`));
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
lines.push(drawBox(`${chalk.bold.cyan(target.name())} ${chalk.dim('\u2014')} ${target.description()}`));
|
|
65
|
+
}
|
|
66
|
+
lines.push('');
|
|
67
|
+
// Usage
|
|
68
|
+
lines.push(`${chalk.bold('Usage:')} ${chalk.yellow(helper.commandUsage(target))}`);
|
|
69
|
+
lines.push('');
|
|
70
|
+
// Subcommands
|
|
71
|
+
const subcommands = helper.visibleCommands(target);
|
|
72
|
+
if (subcommands.length > 0) {
|
|
73
|
+
lines.push(chalk.bold('Commands:'));
|
|
74
|
+
for (const sub of subcommands) {
|
|
75
|
+
lines.push(` ${chalk.yellow(sub.name().padEnd(20))} ${chalk.dim(sub.description() || '')}`);
|
|
76
|
+
}
|
|
77
|
+
lines.push('');
|
|
78
|
+
}
|
|
79
|
+
// Arguments
|
|
80
|
+
const args = helper.visibleArguments(target);
|
|
81
|
+
if (args.length > 0) {
|
|
82
|
+
lines.push(chalk.bold('Arguments:'));
|
|
83
|
+
for (const arg of args) {
|
|
84
|
+
lines.push(` ${chalk.green(helper.argumentTerm(arg).padEnd(30))} ${chalk.dim(helper.argumentDescription(arg))}`);
|
|
85
|
+
}
|
|
86
|
+
lines.push('');
|
|
87
|
+
}
|
|
88
|
+
// Options
|
|
89
|
+
const options = helper.visibleOptions(target);
|
|
90
|
+
if (options.length > 0) {
|
|
91
|
+
lines.push(chalk.bold('Options:'));
|
|
92
|
+
for (const opt of options) {
|
|
93
|
+
lines.push(` ${chalk.green(helper.optionTerm(opt).padEnd(30))} ${chalk.dim(helper.optionDescription(opt))}`);
|
|
94
|
+
}
|
|
95
|
+
lines.push('');
|
|
96
|
+
}
|
|
97
|
+
// Footer
|
|
98
|
+
if (isRoot) {
|
|
99
|
+
lines.push(chalk.dim('Run ') +
|
|
100
|
+
chalk.yellow('unity-mcp-cli <command> --help') +
|
|
101
|
+
chalk.dim(' for detailed usage of each command.'));
|
|
102
|
+
lines.push('');
|
|
103
|
+
}
|
|
104
|
+
return lines.join('\n');
|
|
105
|
+
},
|
|
106
|
+
});
|
|
107
|
+
return cmd;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Print a success message with a green checkmark.
|
|
111
|
+
* In non-TTY mode, uses plain text prefix.
|
|
112
|
+
*/
|
|
113
|
+
export function success(msg) {
|
|
114
|
+
if (isTTY()) {
|
|
115
|
+
console.log(`${chalk.green('\u2714')} ${msg}`);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
console.log(`SUCCESS: ${msg}`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Print an error message with a red cross to stderr.
|
|
123
|
+
* In non-TTY mode, uses plain text prefix.
|
|
124
|
+
*/
|
|
125
|
+
export function error(msg) {
|
|
126
|
+
if (isTTY()) {
|
|
127
|
+
console.error(`${chalk.red('\u2716')} ${chalk.red(msg)}`);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
console.error(`ERROR: ${msg}`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Print an info message with a blue info symbol.
|
|
135
|
+
* In non-TTY mode, uses plain text prefix.
|
|
136
|
+
*/
|
|
137
|
+
export function info(msg) {
|
|
138
|
+
if (isTTY()) {
|
|
139
|
+
console.log(`${chalk.blue('\u2139')} ${msg}`);
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
console.log(`INFO: ${msg}`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Print a warning message with a yellow warning symbol.
|
|
147
|
+
* In non-TTY mode, uses plain text prefix.
|
|
148
|
+
*/
|
|
149
|
+
export function warn(msg) {
|
|
150
|
+
if (isTTY()) {
|
|
151
|
+
console.log(`${chalk.yellow('\u26A0')} ${chalk.yellow(msg)}`);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
console.log(`WARN: ${msg}`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Print a bold cyan section heading.
|
|
159
|
+
*/
|
|
160
|
+
export function heading(msg) {
|
|
161
|
+
console.log(`\n${chalk.bold.cyan(msg)}`);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Print a formatted key-value label.
|
|
165
|
+
*/
|
|
166
|
+
export function label(key, value) {
|
|
167
|
+
console.log(` ${chalk.bold(key + ':')} ${value}`);
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Create a no-op spinner for non-TTY environments.
|
|
171
|
+
* Methods are safe to call but produce no ANSI output.
|
|
172
|
+
*/
|
|
173
|
+
function createNoOpSpinner(text) {
|
|
174
|
+
console.log(text);
|
|
175
|
+
const self = {
|
|
176
|
+
start: () => self,
|
|
177
|
+
stop: () => self,
|
|
178
|
+
success: (msg) => { if (msg)
|
|
179
|
+
console.log(`SUCCESS: ${msg}`); return self; },
|
|
180
|
+
error: (msg) => { if (msg)
|
|
181
|
+
console.error(`ERROR: ${msg}`); return self; },
|
|
182
|
+
warning: (msg) => { if (msg)
|
|
183
|
+
console.log(`WARN: ${msg}`); return self; },
|
|
184
|
+
info: (msg) => { if (msg)
|
|
185
|
+
console.log(`INFO: ${msg}`); return self; },
|
|
186
|
+
clear: () => self,
|
|
187
|
+
get text() { return text; },
|
|
188
|
+
set text(value) { text = value; },
|
|
189
|
+
get isSpinning() { return false; },
|
|
190
|
+
get color() { return 'cyan'; },
|
|
191
|
+
set color(_) { },
|
|
192
|
+
};
|
|
193
|
+
return self;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Start a spinner with the given text. Returns a wrapped spinner instance
|
|
197
|
+
* whose success/error/warning/info methods add an extra space after the symbol
|
|
198
|
+
* for consistent formatting.
|
|
199
|
+
*
|
|
200
|
+
* In non-TTY environments (CI pipelines, piped output), returns a no-op
|
|
201
|
+
* spinner that outputs plain text without ANSI escape codes.
|
|
202
|
+
*/
|
|
203
|
+
export function startSpinner(text) {
|
|
204
|
+
if (!isTTY()) {
|
|
205
|
+
return createNoOpSpinner(text);
|
|
206
|
+
}
|
|
207
|
+
const spinner = yoctoSpinner({ text, color: 'cyan' }).start();
|
|
208
|
+
const origSuccess = spinner.success.bind(spinner);
|
|
209
|
+
const origError = spinner.error.bind(spinner);
|
|
210
|
+
const origWarning = spinner.warning.bind(spinner);
|
|
211
|
+
const origInfo = spinner.info.bind(spinner);
|
|
212
|
+
spinner.success = (msg) => origSuccess(msg ? ` ${msg}` : undefined);
|
|
213
|
+
spinner.error = (msg) => origError(msg ? ` ${msg}` : undefined);
|
|
214
|
+
spinner.warning = (msg) => origWarning(msg ? ` ${msg}` : undefined);
|
|
215
|
+
spinner.info = (msg) => origInfo(msg ? ` ${msg}` : undefined);
|
|
216
|
+
return spinner;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Format a status badge (enabled/disabled).
|
|
220
|
+
*/
|
|
221
|
+
export function badge(enabled) {
|
|
222
|
+
return enabled
|
|
223
|
+
? chalk.bgGreen.black('[enabled]')
|
|
224
|
+
: chalk.bgRed.white('[disabled]');
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Print a feature row with a styled badge and name.
|
|
228
|
+
*/
|
|
229
|
+
export function featureRow(name, enabled) {
|
|
230
|
+
console.log(` ${badge(enabled)} ${name}`);
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Print a divider line.
|
|
234
|
+
*/
|
|
235
|
+
export function divider() {
|
|
236
|
+
console.log(chalk.dim('\u2500'.repeat(50)));
|
|
237
|
+
}
|
|
238
|
+
export function createProgressBar() {
|
|
239
|
+
if (!isTTY()) {
|
|
240
|
+
// Plain text progress for non-interactive environments
|
|
241
|
+
return {
|
|
242
|
+
update(percent, status) {
|
|
243
|
+
const clamped = Math.min(100, Math.max(0, percent));
|
|
244
|
+
console.log(`[${clamped.toFixed(0)}%] ${status}`);
|
|
245
|
+
},
|
|
246
|
+
complete(msg) {
|
|
247
|
+
console.log(`SUCCESS: ${msg}`);
|
|
248
|
+
},
|
|
249
|
+
fail(msg) {
|
|
250
|
+
console.error(`ERROR: ${msg}`);
|
|
251
|
+
},
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
const barWidth = 30;
|
|
255
|
+
let lastLine = '';
|
|
256
|
+
function render(percent, status) {
|
|
257
|
+
const clamped = Math.min(100, Math.max(0, percent));
|
|
258
|
+
const filled = Math.round((clamped / 100) * barWidth);
|
|
259
|
+
const empty = barWidth - filled;
|
|
260
|
+
const bar = chalk.cyan('\u2588').repeat(filled) + chalk.dim('\u2591').repeat(empty);
|
|
261
|
+
const pct = `${clamped.toFixed(1)}%`.padStart(6);
|
|
262
|
+
return ` ${bar} ${chalk.bold(pct)} ${chalk.dim(status)}`;
|
|
263
|
+
}
|
|
264
|
+
return {
|
|
265
|
+
update(percent, status) {
|
|
266
|
+
if (lastLine) {
|
|
267
|
+
process.stderr.write('\r\x1b[K');
|
|
268
|
+
}
|
|
269
|
+
lastLine = render(percent, status);
|
|
270
|
+
process.stderr.write(lastLine);
|
|
271
|
+
},
|
|
272
|
+
complete(msg) {
|
|
273
|
+
if (lastLine) {
|
|
274
|
+
process.stderr.write('\r\x1b[K');
|
|
275
|
+
}
|
|
276
|
+
console.log(`${chalk.green('\u2714')} ${msg}`);
|
|
277
|
+
lastLine = '';
|
|
278
|
+
},
|
|
279
|
+
fail(msg) {
|
|
280
|
+
if (lastLine) {
|
|
281
|
+
process.stderr.write('\r\x1b[K');
|
|
282
|
+
}
|
|
283
|
+
console.error(`${chalk.red('\u2716')} ${chalk.red(msg)}`);
|
|
284
|
+
lastLine = '';
|
|
285
|
+
},
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
//# sourceMappingURL=ui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/utils/ui.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,3 +12,8 @@ export declare function findEditorPath(version?: string): Promise<string | null>
|
|
|
12
12
|
* Spawns a detached process and returns immediately.
|
|
13
13
|
*/
|
|
14
14
|
export declare function launchEditor(editorPath: string, projectPath: string, env?: Record<string, string>): void;
|
|
15
|
+
/**
|
|
16
|
+
* Print actionable help when a required Unity Editor version is not found.
|
|
17
|
+
* Lists installed editors and suggests install or override commands.
|
|
18
|
+
*/
|
|
19
|
+
export declare function printEditorNotFoundHelp(requestedVersion: string | undefined, commandName: string): void;
|
|
@@ -2,7 +2,8 @@ import * as fs from 'fs';
|
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import { spawn } from 'child_process';
|
|
4
4
|
import { platform } from 'os';
|
|
5
|
-
import { ensureUnityHub, listInstalledEditors } from './unity-hub.js';
|
|
5
|
+
import { findUnityHub, ensureUnityHub, listInstalledEditors } from './unity-hub.js';
|
|
6
|
+
import * as ui from './ui.js';
|
|
6
7
|
/**
|
|
7
8
|
* Compare two Unity version strings with numeric-aware sorting.
|
|
8
9
|
* Parses components like "2022.3.62f3" into [2022, 3, 62, "f", 3].
|
|
@@ -64,9 +65,15 @@ export function getProjectEditorVersion(projectPath) {
|
|
|
64
65
|
* Uses Unity Hub to locate installed editors. Installs Unity Hub automatically if needed.
|
|
65
66
|
*/
|
|
66
67
|
export async function findEditorPath(version) {
|
|
68
|
+
// Fast path: if we know the version, check common install locations first (instant filesystem check)
|
|
69
|
+
if (version) {
|
|
70
|
+
const fastResult = findEditorPathByCommonLocations(version);
|
|
71
|
+
if (fastResult)
|
|
72
|
+
return fastResult;
|
|
73
|
+
}
|
|
74
|
+
// Slow path: query Unity Hub CLI for installed editors
|
|
67
75
|
const hubPath = await ensureUnityHub().catch(() => null);
|
|
68
76
|
if (!hubPath) {
|
|
69
|
-
// Try common default locations
|
|
70
77
|
return findEditorPathByCommonLocations(version);
|
|
71
78
|
}
|
|
72
79
|
const editors = listInstalledEditors(hubPath);
|
|
@@ -186,7 +193,46 @@ export function launchEditor(editorPath, projectPath, env) {
|
|
|
186
193
|
stdio: 'ignore',
|
|
187
194
|
env: { ...process.env, ...env },
|
|
188
195
|
});
|
|
196
|
+
child.on('spawn', () => {
|
|
197
|
+
ui.success(`Launched Unity Editor (PID: ${child.pid})`);
|
|
198
|
+
});
|
|
199
|
+
child.on('error', (err) => {
|
|
200
|
+
ui.error(`Failed to launch Unity Editor: ${err.message}`);
|
|
201
|
+
});
|
|
189
202
|
child.unref();
|
|
190
|
-
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Print actionable help when a required Unity Editor version is not found.
|
|
206
|
+
* Lists installed editors and suggests install or override commands.
|
|
207
|
+
*/
|
|
208
|
+
export function printEditorNotFoundHelp(requestedVersion, commandName) {
|
|
209
|
+
if (requestedVersion) {
|
|
210
|
+
ui.error(`Unity Editor ${requestedVersion} is not installed.`);
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
ui.error('No Unity Editor found.');
|
|
214
|
+
}
|
|
215
|
+
ui.heading('Options:');
|
|
216
|
+
if (requestedVersion) {
|
|
217
|
+
ui.info(`Install it: npx unity-mcp-cli install-unity ${requestedVersion}`);
|
|
218
|
+
}
|
|
219
|
+
ui.info('Install latest stable: npx unity-mcp-cli install-unity');
|
|
220
|
+
// Show installed editors as alternatives
|
|
221
|
+
const hubPath = findUnityHub();
|
|
222
|
+
if (hubPath) {
|
|
223
|
+
const editors = listInstalledEditors(hubPath);
|
|
224
|
+
if (editors.length > 0) {
|
|
225
|
+
ui.heading('Installed editors:');
|
|
226
|
+
for (const editor of editors) {
|
|
227
|
+
ui.label(editor.version, editor.path);
|
|
228
|
+
}
|
|
229
|
+
if (requestedVersion) {
|
|
230
|
+
const hint = commandName === 'connect'
|
|
231
|
+
? `npx unity-mcp-cli ${commandName} --unity ${editors[0].version} --path <path> --url <url>`
|
|
232
|
+
: `npx unity-mcp-cli ${commandName} <path> --unity ${editors[0].version}`;
|
|
233
|
+
ui.info(`Use a different version: ${hint}`);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
191
237
|
}
|
|
192
238
|
//# sourceMappingURL=unity-editor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unity-editor.js","sourceRoot":"","sources":["../../src/utils/unity-editor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC9B,OAAO,
|
|
1
|
+
{"version":3,"file":"unity-editor.js","sourceRoot":"","sources":["../../src/utils/unity-editor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
export interface AvailableRelease {
|
|
2
|
+
version: string;
|
|
3
|
+
isStable: boolean;
|
|
4
|
+
}
|
|
1
5
|
/**
|
|
2
6
|
* Detect the Unity Hub installation path based on the current platform.
|
|
3
7
|
* Returns the path if found, or null.
|
|
@@ -24,10 +28,34 @@ export declare function listInstalledEditors(hubPath: string): InstalledEditor[]
|
|
|
24
28
|
* Find the installed editor with the highest version number.
|
|
25
29
|
*/
|
|
26
30
|
export declare function findHighestEditor(editors: InstalledEditor[]): InstalledEditor;
|
|
31
|
+
/**
|
|
32
|
+
* List available Unity editor releases from Unity Hub CLI.
|
|
33
|
+
*/
|
|
34
|
+
export declare function listAvailableReleases(hubPath: string): AvailableRelease[];
|
|
35
|
+
/**
|
|
36
|
+
* Find the latest stable (f-suffix) release from the available releases.
|
|
37
|
+
*/
|
|
38
|
+
export declare function findLatestStableRelease(releases: AvailableRelease[]): AvailableRelease | null;
|
|
39
|
+
export declare function isValidUnityVersion(version: string): boolean;
|
|
40
|
+
export declare function resolveChangeset(version: string): Promise<string | null>;
|
|
41
|
+
/**
|
|
42
|
+
* Parse Unity Hub CLI stdout and update the progress bar accordingly.
|
|
43
|
+
* Hub output lines look like:
|
|
44
|
+
* [Unity (6000.3.11f1)] downloading 50.54%
|
|
45
|
+
* [Unity (6000.3.11f1)] validating download...
|
|
46
|
+
* [Unity (6000.3.11f1)] installing...
|
|
47
|
+
* [Unity (6000.3.11f1)] installed successfully.
|
|
48
|
+
*/
|
|
49
|
+
export declare function parseHubProgress(line: string): {
|
|
50
|
+
percent: number;
|
|
51
|
+
status: string;
|
|
52
|
+
} | null;
|
|
27
53
|
/**
|
|
28
54
|
* Install a Unity editor version via Unity Hub CLI.
|
|
55
|
+
* Automatically resolves changeset for versions not in the promoted releases list.
|
|
56
|
+
* Shows a progress bar during download and status during installation.
|
|
29
57
|
*/
|
|
30
|
-
export declare function installEditor(hubPath: string, version: string): void
|
|
58
|
+
export declare function installEditor(hubPath: string, version: string, prefetchedReleases?: AvailableRelease[]): Promise<void>;
|
|
31
59
|
/**
|
|
32
60
|
* Create a new Unity project using the Unity Editor directly.
|
|
33
61
|
* Unity Hub's headless CLI does not support a 'create' command in newer versions,
|