unity-mcp-cli 0.51.6 → 0.53.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/README.md +333 -0
- package/bin/{unity-mcp.js → unity-mcp-cli.js} +2 -2
- package/dist/commands/configure.js +22 -15
- package/dist/commands/configure.js.map +1 -1
- package/dist/commands/connect.js +37 -14
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/create-project.js +25 -13
- package/dist/commands/create-project.js.map +1 -1
- package/dist/commands/install-plugin.js +15 -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 +59 -0
- package/dist/commands/install-unity.js.map +1 -0
- package/dist/commands/open.js +21 -11
- package/dist/commands/open.js.map +1 -1
- package/dist/commands/remove-plugin.d.ts +2 -0
- package/dist/commands/remove-plugin.js +27 -0
- package/dist/commands/remove-plugin.js.map +1 -0
- package/dist/index.js +26 -10
- package/dist/index.js.map +1 -1
- package/dist/utils/config.js +5 -5
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/manifest.d.ts +6 -0
- package/dist/utils/manifest.js +40 -13
- package/dist/utils/manifest.js.map +1 -1
- package/dist/utils/ui.d.ts +50 -0
- package/dist/utils/ui.js +136 -0
- package/dist/utils/ui.js.map +1 -0
- package/dist/utils/unity-editor.d.ts +2 -2
- package/dist/utils/unity-editor.js +26 -8
- package/dist/utils/unity-editor.js.map +1 -1
- package/dist/utils/unity-hub.d.ts +16 -1
- package/dist/utils/unity-hub.js +244 -13
- 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 +50 -44
- package/dist/commands/install-editor.d.ts +0 -2
- package/dist/commands/install-editor.js +0 -46
- package/dist/commands/install-editor.js.map +0 -1
|
@@ -2,25 +2,34 @@ import { Command } from 'commander';
|
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import * as fs from 'fs';
|
|
4
4
|
import { addPluginToManifest, resolveLatestVersion } from '../utils/manifest.js';
|
|
5
|
+
import * as ui from '../utils/ui.js';
|
|
5
6
|
export const installPluginCommand = new Command('install-plugin')
|
|
6
7
|
.description('Install Unity-MCP plugin into a Unity project')
|
|
7
|
-
.
|
|
8
|
+
.argument('[path]', 'Path to the Unity project')
|
|
9
|
+
.option('--path <path>', 'Path to the Unity project')
|
|
8
10
|
.option('--plugin-version <version>', 'Plugin version to install (default: latest)')
|
|
9
|
-
.action(async (options) => {
|
|
10
|
-
const
|
|
11
|
+
.action(async (positionalPath, options) => {
|
|
12
|
+
const resolvedPath = positionalPath ?? options.path;
|
|
13
|
+
if (!resolvedPath) {
|
|
14
|
+
ui.error('Path is required. Usage: unity-mcp-cli install-plugin <path> or --path <path>');
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
const projectPath = path.resolve(resolvedPath);
|
|
11
18
|
// Validate project exists
|
|
12
19
|
const manifestPath = path.join(projectPath, 'Packages', 'manifest.json');
|
|
13
20
|
if (!fs.existsSync(manifestPath)) {
|
|
14
|
-
|
|
21
|
+
ui.error(`Not a valid Unity project (missing Packages/manifest.json): ${projectPath}`);
|
|
15
22
|
process.exit(1);
|
|
16
23
|
}
|
|
17
24
|
// Resolve version
|
|
18
25
|
let version = options.pluginVersion;
|
|
19
26
|
if (!version) {
|
|
27
|
+
const spinner = ui.startSpinner('Resolving latest plugin version...');
|
|
20
28
|
version = await resolveLatestVersion();
|
|
29
|
+
spinner.succeed(`Resolved plugin version: ${version}`);
|
|
21
30
|
}
|
|
22
|
-
|
|
31
|
+
ui.info(`Installing Unity-MCP plugin v${version} into: ${projectPath}`);
|
|
23
32
|
addPluginToManifest(projectPath, version);
|
|
24
|
-
|
|
33
|
+
ui.success('Done! Open the project in Unity Editor to complete installation.');
|
|
25
34
|
});
|
|
26
35
|
//# sourceMappingURL=install-plugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-plugin.js","sourceRoot":"","sources":["../../src/commands/install-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"install-plugin.js","sourceRoot":"","sources":["../../src/commands/install-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAErC,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,OAAO,CAAC,gBAAgB,CAAC;KAC9D,WAAW,CAAC,+CAA+C,CAAC;KAC5D,QAAQ,CAAC,QAAQ,EAAE,2BAA2B,CAAC;KAC/C,MAAM,CAAC,eAAe,EAAE,2BAA2B,CAAC;KACpD,MAAM,CAAC,4BAA4B,EAAE,6CAA6C,CAAC;KACnF,MAAM,CAAC,KAAK,EAAE,cAAkC,EAAE,OAAkD,EAAE,EAAE;IACvG,MAAM,YAAY,GAAG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IACpD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,EAAE,CAAC,KAAK,CAAC,+EAA+E,CAAC,CAAC;QAC1F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAE/C,0BAA0B;IAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;IACzE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,EAAE,CAAC,KAAK,CAAC,+DAA+D,WAAW,EAAE,CAAC,CAAC;QACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,kBAAkB;IAClB,IAAI,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;IACpC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,oCAAoC,CAAC,CAAC;QACtE,OAAO,GAAG,MAAM,oBAAoB,EAAE,CAAC;QACvC,OAAO,CAAC,OAAO,CAAC,4BAA4B,OAAO,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,EAAE,CAAC,IAAI,CAAC,gCAAgC,OAAO,UAAU,WAAW,EAAE,CAAC,CAAC;IACxE,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC1C,EAAE,CAAC,OAAO,CAAC,kEAAkE,CAAC,CAAC;AACjF,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import * as fs from 'fs';
|
|
4
|
+
import { ensureUnityHub, installEditor, listInstalledEditors } from '../utils/unity-hub.js';
|
|
5
|
+
import { getProjectEditorVersion } from '../utils/unity-editor.js';
|
|
6
|
+
import * as ui from '../utils/ui.js';
|
|
7
|
+
export const installUnityCommand = new Command('install-unity')
|
|
8
|
+
.description('Install Unity Editor via Unity Hub')
|
|
9
|
+
.option('--version <version>', 'Unity Editor version to install')
|
|
10
|
+
.option('--path <path>', 'Read version from an existing Unity project')
|
|
11
|
+
.action(async (options) => {
|
|
12
|
+
const spinner = ui.startSpinner('Locating Unity Hub...');
|
|
13
|
+
let hubPath;
|
|
14
|
+
try {
|
|
15
|
+
hubPath = await ensureUnityHub();
|
|
16
|
+
}
|
|
17
|
+
catch (err) {
|
|
18
|
+
spinner.fail('Failed to locate Unity Hub');
|
|
19
|
+
throw err;
|
|
20
|
+
}
|
|
21
|
+
spinner.succeed('Unity Hub located');
|
|
22
|
+
let version = options.version;
|
|
23
|
+
if (!version && options.path) {
|
|
24
|
+
const projectPath = path.resolve(options.path);
|
|
25
|
+
if (!fs.existsSync(projectPath)) {
|
|
26
|
+
ui.error(`Project path does not exist: ${projectPath}`);
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
version = getProjectEditorVersion(projectPath) ?? undefined;
|
|
30
|
+
if (version) {
|
|
31
|
+
ui.info(`Detected editor version from project: ${version}`);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
ui.error('Could not read editor version from ProjectSettings/ProjectVersion.txt');
|
|
35
|
+
process.exit(1);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (!version) {
|
|
39
|
+
ui.error('Please specify --version or --path');
|
|
40
|
+
const editors = listInstalledEditors(hubPath);
|
|
41
|
+
if (editors.length > 0) {
|
|
42
|
+
ui.heading('Currently installed editors:');
|
|
43
|
+
for (const editor of editors) {
|
|
44
|
+
ui.label(editor.version, editor.path);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
// Check if already installed
|
|
50
|
+
const editors = listInstalledEditors(hubPath);
|
|
51
|
+
const alreadyInstalled = editors.find((e) => e.version === version);
|
|
52
|
+
if (alreadyInstalled) {
|
|
53
|
+
ui.success(`Unity Editor ${version} is already installed at: ${alreadyInstalled.path}`);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
installEditor(hubPath, version);
|
|
57
|
+
ui.success(`Unity Editor ${version} installed successfully`);
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=install-unity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-unity.js","sourceRoot":"","sources":["../../src/commands/install-unity.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/open.js
CHANGED
|
@@ -2,32 +2,42 @@ import { Command } from 'commander';
|
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import * as fs from 'fs';
|
|
4
4
|
import { findEditorPath, getProjectEditorVersion, launchEditor } from '../utils/unity-editor.js';
|
|
5
|
+
import * as ui from '../utils/ui.js';
|
|
5
6
|
export const openCommand = new Command('open')
|
|
6
7
|
.description('Open a Unity project in Unity Editor')
|
|
7
|
-
.
|
|
8
|
-
.option('--
|
|
9
|
-
.
|
|
10
|
-
|
|
8
|
+
.argument('[path]', 'Path to the Unity project')
|
|
9
|
+
.option('--path <path>', 'Path to the Unity project')
|
|
10
|
+
.option('--unity <version>', 'Specific Unity Editor version to use')
|
|
11
|
+
.action(async (positionalPath, options) => {
|
|
12
|
+
const resolvedPath = positionalPath ?? options.path;
|
|
13
|
+
if (!resolvedPath) {
|
|
14
|
+
ui.error('Path is required. Usage: unity-mcp-cli open <path> or --path <path>');
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
const projectPath = path.resolve(resolvedPath);
|
|
11
18
|
if (!fs.existsSync(projectPath)) {
|
|
12
|
-
|
|
19
|
+
ui.error(`Project path does not exist: ${projectPath}`);
|
|
13
20
|
process.exit(1);
|
|
14
21
|
}
|
|
15
22
|
// Determine editor version
|
|
16
|
-
let version = options.
|
|
23
|
+
let version = options.unity;
|
|
17
24
|
if (!version) {
|
|
18
25
|
version = getProjectEditorVersion(projectPath) ?? undefined;
|
|
19
26
|
if (version) {
|
|
20
|
-
|
|
27
|
+
ui.info(`Detected editor version from project: ${version}`);
|
|
21
28
|
}
|
|
22
29
|
}
|
|
23
|
-
const
|
|
30
|
+
const spinner = ui.startSpinner('Locating Unity Editor...');
|
|
31
|
+
const editorPath = await findEditorPath(version);
|
|
24
32
|
if (!editorPath) {
|
|
33
|
+
spinner.fail('Unity Editor not found');
|
|
25
34
|
const versionMsg = version ? ` (version ${version})` : '';
|
|
26
|
-
|
|
35
|
+
ui.error(`Unity Editor not found${versionMsg}. Install it with: unity-mcp-cli install-unity --version <version>`);
|
|
27
36
|
process.exit(1);
|
|
28
37
|
}
|
|
29
|
-
|
|
30
|
-
|
|
38
|
+
spinner.succeed('Unity Editor located');
|
|
39
|
+
ui.label('Project', projectPath);
|
|
40
|
+
ui.label('Editor', editorPath);
|
|
31
41
|
launchEditor(editorPath, projectPath);
|
|
32
42
|
});
|
|
33
43
|
//# sourceMappingURL=open.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open.js","sourceRoot":"","sources":["../../src/commands/open.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"open.js","sourceRoot":"","sources":["../../src/commands/open.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACjG,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAErC,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,sCAAsC,CAAC;KACnD,QAAQ,CAAC,QAAQ,EAAE,2BAA2B,CAAC;KAC/C,MAAM,CAAC,eAAe,EAAE,2BAA2B,CAAC;KACpD,MAAM,CAAC,mBAAmB,EAAE,sCAAsC,CAAC;KACnE,MAAM,CAAC,KAAK,EAAE,cAAkC,EAAE,OAA0C,EAAE,EAAE;IAC/F,MAAM,YAAY,GAAG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IACpD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,EAAE,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;QAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAE/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,EAAE,CAAC,KAAK,CAAC,gCAAgC,WAAW,EAAE,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,2BAA2B;IAC3B,IAAI,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,uBAAuB,CAAC,WAAW,CAAC,IAAI,SAAS,CAAC;QAC5D,IAAI,OAAO,EAAE,CAAC;YACZ,EAAE,CAAC,IAAI,CAAC,yCAAyC,OAAO,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,0BAA0B,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACvC,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,aAAa,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,EAAE,CAAC,KAAK,CAAC,yBAAyB,UAAU,oEAAoE,CAAC,CAAC;QAClH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAExC,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACjC,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC/B,YAAY,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import * as fs from 'fs';
|
|
4
|
+
import { removePluginFromManifest } from '../utils/manifest.js';
|
|
5
|
+
import * as ui from '../utils/ui.js';
|
|
6
|
+
export const removePluginCommand = new Command('remove-plugin')
|
|
7
|
+
.description('Remove Unity-MCP plugin from a Unity project')
|
|
8
|
+
.argument('[path]', 'Path to the Unity project')
|
|
9
|
+
.option('--path <path>', 'Path to the Unity project')
|
|
10
|
+
.action(async (positionalPath, options) => {
|
|
11
|
+
const resolvedPath = positionalPath ?? options.path;
|
|
12
|
+
if (!resolvedPath) {
|
|
13
|
+
ui.error('Path is required. Usage: unity-mcp-cli remove-plugin <path> or --path <path>');
|
|
14
|
+
process.exit(1);
|
|
15
|
+
}
|
|
16
|
+
const projectPath = path.resolve(resolvedPath);
|
|
17
|
+
// Validate project exists
|
|
18
|
+
const manifestPath = path.join(projectPath, 'Packages', 'manifest.json');
|
|
19
|
+
if (!fs.existsSync(manifestPath)) {
|
|
20
|
+
ui.error(`Not a valid Unity project (missing Packages/manifest.json): ${projectPath}`);
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
ui.info(`Removing Unity-MCP plugin from: ${projectPath}`);
|
|
24
|
+
removePluginFromManifest(projectPath);
|
|
25
|
+
ui.success('Done!');
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=remove-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove-plugin.js","sourceRoot":"","sources":["../../src/commands/remove-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAErC,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,OAAO,CAAC,eAAe,CAAC;KAC5D,WAAW,CAAC,8CAA8C,CAAC;KAC3D,QAAQ,CAAC,QAAQ,EAAE,2BAA2B,CAAC;KAC/C,MAAM,CAAC,eAAe,EAAE,2BAA2B,CAAC;KACpD,MAAM,CAAC,KAAK,EAAE,cAAkC,EAAE,OAA0B,EAAE,EAAE;IAC/E,MAAM,YAAY,GAAG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IACpD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,EAAE,CAAC,KAAK,CAAC,8EAA8E,CAAC,CAAC;QACzF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAE/C,0BAA0B;IAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;IACzE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,EAAE,CAAC,KAAK,CAAC,+DAA+D,WAAW,EAAE,CAAC,CAAC;QACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,EAAE,CAAC,IAAI,CAAC,mCAAmC,WAAW,EAAE,CAAC,CAAC;IAC1D,wBAAwB,CAAC,WAAW,CAAC,CAAC;IACtC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACtB,CAAC,CAAC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,26 +1,42 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
import { createRequire } from 'module';
|
|
3
3
|
import { createProjectCommand } from './commands/create-project.js';
|
|
4
|
-
import {
|
|
4
|
+
import { installUnityCommand } from './commands/install-unity.js';
|
|
5
5
|
import { openCommand } from './commands/open.js';
|
|
6
6
|
import { installPluginCommand } from './commands/install-plugin.js';
|
|
7
7
|
import { configureCommand } from './commands/configure.js';
|
|
8
8
|
import { connectCommand } from './commands/connect.js';
|
|
9
|
+
import { removePluginCommand } from './commands/remove-plugin.js';
|
|
10
|
+
import { configureStyledHelp, error as uiError } from './utils/ui.js';
|
|
9
11
|
const require = createRequire(import.meta.url);
|
|
10
12
|
const pkg = require('../package.json');
|
|
11
13
|
const program = new Command();
|
|
12
14
|
program
|
|
13
|
-
.name('unity-mcp')
|
|
15
|
+
.name('unity-mcp-cli')
|
|
14
16
|
.description('Cross-platform CLI tool for Unity-MCP operations')
|
|
15
17
|
.version(pkg.version);
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
18
|
+
// Register all subcommands
|
|
19
|
+
const subcommands = [
|
|
20
|
+
createProjectCommand,
|
|
21
|
+
installUnityCommand,
|
|
22
|
+
openCommand,
|
|
23
|
+
installPluginCommand,
|
|
24
|
+
configureCommand,
|
|
25
|
+
connectCommand,
|
|
26
|
+
removePluginCommand,
|
|
27
|
+
];
|
|
28
|
+
for (const cmd of subcommands) {
|
|
29
|
+
configureStyledHelp(cmd);
|
|
30
|
+
program.addCommand(cmd);
|
|
31
|
+
}
|
|
32
|
+
// Apply styled help to root (after subcommands so banner knows about them)
|
|
33
|
+
configureStyledHelp(program, pkg.version);
|
|
34
|
+
// Show help when no command provided
|
|
35
|
+
program.action(() => {
|
|
36
|
+
program.outputHelp();
|
|
37
|
+
});
|
|
38
|
+
program.parseAsync().catch((err) => {
|
|
39
|
+
uiError(err.message || String(err));
|
|
24
40
|
process.exit(1);
|
|
25
41
|
});
|
|
26
42
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,KAAK,IAAI,OAAO,EAAE,MAAM,eAAe,CAAC;AAEtE,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAE9D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,eAAe,CAAC;KACrB,WAAW,CAAC,kDAAkD,CAAC;KAC/D,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAExB,2BAA2B;AAC3B,MAAM,WAAW,GAAG;IAClB,oBAAoB;IACpB,mBAAmB;IACnB,WAAW;IACX,oBAAoB;IACpB,gBAAgB;IAChB,cAAc;IACd,mBAAmB;CACpB,CAAC;AAEF,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;IAC9B,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACzB,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED,2EAA2E;AAC3E,mBAAmB,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;AAE1C,qCAAqC;AACrC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE;IAClB,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACjC,OAAO,CAAE,GAAa,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/utils/config.js
CHANGED
|
@@ -40,9 +40,9 @@ export function readConfig(projectPath) {
|
|
|
40
40
|
}
|
|
41
41
|
catch (err) {
|
|
42
42
|
if (err instanceof SyntaxError) {
|
|
43
|
-
|
|
43
|
+
throw new SyntaxError(`Malformed JSON in config file: ${configPath}\n${err.message}`);
|
|
44
44
|
}
|
|
45
|
-
|
|
45
|
+
throw err;
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
/**
|
|
@@ -61,9 +61,9 @@ export function writeConfig(projectPath, config) {
|
|
|
61
61
|
* Read config or create with defaults if it doesn't exist.
|
|
62
62
|
*/
|
|
63
63
|
export function getOrCreateConfig(projectPath) {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
64
|
+
if (fs.existsSync(getConfigPath(projectPath))) {
|
|
65
|
+
return readConfig(projectPath);
|
|
66
|
+
}
|
|
67
67
|
const config = createDefaultConfig(projectPath);
|
|
68
68
|
writeConfig(projectPath, config);
|
|
69
69
|
return config;
|
package/dist/utils/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAEtD,MAAM,oBAAoB,GAAG,4CAA4C,CAAC;AAyB1E,SAAS,aAAa,CAAC,WAAmB;IACxC,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IACrD,MAAM,IAAI,GAAG,yBAAyB,CAAC,WAAW,CAAC,CAAC;IACpD,OAAO;QACL,IAAI,EAAE,oBAAoB,IAAI,EAAE;QAChC,aAAa,EAAE,KAAK;QACpB,QAAQ,EAAE,CAAC;QACX,SAAS,EAAE,KAAK;QAChB,iBAAiB,EAAE,KAAK;QACxB,eAAe,EAAE,gBAAgB;QACjC,UAAU,EAAE,MAAM;QAClB,cAAc,EAAE,QAAQ;QACxB,cAAc,EAAE,qBAAqB;QACrC,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,EAAE;QACX,SAAS,EAAE,EAAE;KACd,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,WAAmB;IAC5C,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAClD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAA0B,CAAC;IACnD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,WAAW,EAAE,CAAC;YAC/B,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/manifest.d.ts
CHANGED
|
@@ -15,3 +15,9 @@ export declare function shouldUpdateVersion(currentVersion: string, newVersion:
|
|
|
15
15
|
* - Adds/updates the plugin dependency (never downgrades)
|
|
16
16
|
*/
|
|
17
17
|
export declare function addPluginToManifest(projectPath: string, version: string): void;
|
|
18
|
+
/**
|
|
19
|
+
* Remove Unity-MCP plugin from a Unity project's Packages/manifest.json.
|
|
20
|
+
* Only removes the plugin dependency — scoped registries and scopes are
|
|
21
|
+
* left untouched because other packages may depend on them.
|
|
22
|
+
*/
|
|
23
|
+
export declare function removePluginFromManifest(projectPath: string): void;
|
package/dist/utils/manifest.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
2
|
import * as path from 'path';
|
|
3
|
-
import
|
|
3
|
+
import * as ui from './ui.js';
|
|
4
4
|
const PACKAGE_ID = 'com.ivanmurzak.unity.mcp';
|
|
5
5
|
const REGISTRY_NAME = 'package.openupm.com';
|
|
6
6
|
const REGISTRY_URL = 'https://package.openupm.com';
|
|
@@ -13,7 +13,7 @@ const REQUIRED_SCOPES = [
|
|
|
13
13
|
'org.nuget.r3',
|
|
14
14
|
];
|
|
15
15
|
// Hardcoded fallback version (updated on each release)
|
|
16
|
-
const FALLBACK_VERSION = '0.
|
|
16
|
+
const FALLBACK_VERSION = '0.53.1';
|
|
17
17
|
/**
|
|
18
18
|
* Resolve the latest plugin version. Tries OpenUPM API first, falls back to hardcoded version.
|
|
19
19
|
*/
|
|
@@ -30,7 +30,7 @@ export async function resolveLatestVersion() {
|
|
|
30
30
|
const data = (await res.json());
|
|
31
31
|
const latest = data?.['dist-tags']?.latest;
|
|
32
32
|
if (latest) {
|
|
33
|
-
|
|
33
|
+
ui.info(`Resolved latest version from OpenUPM: ${latest}`);
|
|
34
34
|
return latest;
|
|
35
35
|
}
|
|
36
36
|
}
|
|
@@ -42,7 +42,7 @@ export async function resolveLatestVersion() {
|
|
|
42
42
|
catch {
|
|
43
43
|
// Network error or timeout — fall through to hardcoded version
|
|
44
44
|
}
|
|
45
|
-
|
|
45
|
+
ui.warn(`Using fallback version: ${FALLBACK_VERSION}`);
|
|
46
46
|
return FALLBACK_VERSION;
|
|
47
47
|
}
|
|
48
48
|
/**
|
|
@@ -60,13 +60,20 @@ export function shouldUpdateVersion(currentVersion, newVersion) {
|
|
|
60
60
|
if (nonSemverPrefixes.some((prefix) => currentVersion.startsWith(prefix))) {
|
|
61
61
|
return false;
|
|
62
62
|
}
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
63
|
+
const numericOnly = /^\d+(\.\d+)*$/;
|
|
64
|
+
if (numericOnly.test(currentVersion) && numericOnly.test(newVersion)) {
|
|
65
|
+
const currentParts = currentVersion.split('.').map(Number);
|
|
66
|
+
const targetParts = newVersion.split('.').map(Number);
|
|
67
|
+
const len = Math.max(currentParts.length, targetParts.length);
|
|
68
|
+
for (let i = 0; i < len; i++) {
|
|
69
|
+
const c = currentParts[i] ?? 0;
|
|
70
|
+
const t = targetParts[i] ?? 0;
|
|
71
|
+
if (t !== c)
|
|
72
|
+
return t > c;
|
|
73
|
+
}
|
|
74
|
+
return false;
|
|
67
75
|
}
|
|
68
|
-
|
|
69
|
-
return newVersion.localeCompare(currentVersion) > 0;
|
|
76
|
+
return newVersion.toLowerCase() > currentVersion.toLowerCase();
|
|
70
77
|
}
|
|
71
78
|
/**
|
|
72
79
|
* Add Unity-MCP plugin to a Unity project's Packages/manifest.json.
|
|
@@ -120,15 +127,35 @@ export function addPluginToManifest(projectPath, version) {
|
|
|
120
127
|
modified = true;
|
|
121
128
|
}
|
|
122
129
|
else {
|
|
123
|
-
|
|
130
|
+
ui.info(`Plugin already at version ${currentVersion} (>= ${version}). Skipping version update.`);
|
|
124
131
|
}
|
|
125
132
|
// --- Write back
|
|
126
133
|
if (modified) {
|
|
127
134
|
fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + '\n');
|
|
128
|
-
|
|
135
|
+
ui.success(`Updated ${manifestPath}`);
|
|
129
136
|
}
|
|
130
137
|
else {
|
|
131
|
-
|
|
138
|
+
ui.info('manifest.json is already up to date.');
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Remove Unity-MCP plugin from a Unity project's Packages/manifest.json.
|
|
143
|
+
* Only removes the plugin dependency — scoped registries and scopes are
|
|
144
|
+
* left untouched because other packages may depend on them.
|
|
145
|
+
*/
|
|
146
|
+
export function removePluginFromManifest(projectPath) {
|
|
147
|
+
const manifestPath = path.join(projectPath, 'Packages', 'manifest.json');
|
|
148
|
+
if (!fs.existsSync(manifestPath)) {
|
|
149
|
+
throw new Error(`manifest.json not found at: ${manifestPath}`);
|
|
150
|
+
}
|
|
151
|
+
const rawJson = fs.readFileSync(manifestPath, 'utf-8');
|
|
152
|
+
const manifest = JSON.parse(rawJson);
|
|
153
|
+
if (!manifest.dependencies || !(PACKAGE_ID in manifest.dependencies)) {
|
|
154
|
+
ui.info('Unity-MCP plugin is not installed. Nothing to remove.');
|
|
155
|
+
return;
|
|
132
156
|
}
|
|
157
|
+
delete manifest.dependencies[PACKAGE_ID];
|
|
158
|
+
fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + '\n');
|
|
159
|
+
ui.success(`Removed ${PACKAGE_ID} from ${manifestPath}`);
|
|
133
160
|
}
|
|
134
161
|
//# sourceMappingURL=manifest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/utils/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/utils/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { type Ora } from 'ora';
|
|
2
|
+
import type { Command } from 'commander';
|
|
3
|
+
/**
|
|
4
|
+
* Apply styled help formatting to a Commander command.
|
|
5
|
+
* Call this on every Command instance (root and subcommands)
|
|
6
|
+
* so that --help / -h always renders the fancy UI.
|
|
7
|
+
*
|
|
8
|
+
* @param appVersion - The CLI version string, shown in the root banner.
|
|
9
|
+
*/
|
|
10
|
+
export declare function configureStyledHelp(cmd: Command, appVersion?: string): Command;
|
|
11
|
+
/**
|
|
12
|
+
* Print a success message with a green checkmark.
|
|
13
|
+
*/
|
|
14
|
+
export declare function success(msg: string): void;
|
|
15
|
+
/**
|
|
16
|
+
* Print an error message with a red cross to stderr.
|
|
17
|
+
*/
|
|
18
|
+
export declare function error(msg: string): void;
|
|
19
|
+
/**
|
|
20
|
+
* Print an info message with a blue info symbol.
|
|
21
|
+
*/
|
|
22
|
+
export declare function info(msg: string): void;
|
|
23
|
+
/**
|
|
24
|
+
* Print a warning message with a yellow warning symbol.
|
|
25
|
+
*/
|
|
26
|
+
export declare function warn(msg: string): void;
|
|
27
|
+
/**
|
|
28
|
+
* Print a bold cyan section heading.
|
|
29
|
+
*/
|
|
30
|
+
export declare function heading(msg: string): void;
|
|
31
|
+
/**
|
|
32
|
+
* Print a formatted key-value label.
|
|
33
|
+
*/
|
|
34
|
+
export declare function label(key: string, value: string): void;
|
|
35
|
+
/**
|
|
36
|
+
* Start an ora spinner with the given text. Returns the spinner instance.
|
|
37
|
+
*/
|
|
38
|
+
export declare function startSpinner(text: string): Ora;
|
|
39
|
+
/**
|
|
40
|
+
* Format a status badge (enabled/disabled).
|
|
41
|
+
*/
|
|
42
|
+
export declare function badge(enabled: boolean): string;
|
|
43
|
+
/**
|
|
44
|
+
* Print a feature row with a styled badge and name.
|
|
45
|
+
*/
|
|
46
|
+
export declare function featureRow(name: string, enabled: boolean): void;
|
|
47
|
+
/**
|
|
48
|
+
* Print a divider line.
|
|
49
|
+
*/
|
|
50
|
+
export declare function divider(): void;
|