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/commands/open.js
CHANGED
|
@@ -1,39 +1,111 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import * as fs from 'fs';
|
|
4
|
-
import { findEditorPath, getProjectEditorVersion, launchEditor } from '../utils/unity-editor.js';
|
|
4
|
+
import { findEditorPath, getProjectEditorVersion, launchEditor, printEditorNotFoundHelp } from '../utils/unity-editor.js';
|
|
5
|
+
import * as ui from '../utils/ui.js';
|
|
6
|
+
import { verbose } from '../utils/ui.js';
|
|
5
7
|
export const openCommand = new Command('open')
|
|
6
|
-
.description('Open a Unity project in Unity Editor')
|
|
8
|
+
.description('Open a Unity project in Unity Editor, optionally passing MCP connection env vars when connection options (--url, --token, etc.) are provided. Use --no-connect to suppress all MCP env vars.')
|
|
7
9
|
.argument('[path]', 'Path to the Unity project')
|
|
8
10
|
.option('--path <path>', 'Path to the Unity project')
|
|
9
11
|
.option('--unity <version>', 'Specific Unity Editor version to use')
|
|
12
|
+
.option('--no-connect', 'Open without MCP connection environment variables')
|
|
13
|
+
.option('--url <url>', 'MCP server URL to connect to (sets UNITY_MCP_HOST)')
|
|
14
|
+
.option('--tools <names>', 'Comma-separated list of tools to enable (sets UNITY_MCP_TOOLS)')
|
|
15
|
+
.option('--token <token>', 'Auth token (sets UNITY_MCP_TOKEN)')
|
|
16
|
+
.option('--auth <option>', 'Auth option: none or required (sets UNITY_MCP_AUTH_OPTION)')
|
|
17
|
+
.option('--keep-connected', 'Force keep connected (sets UNITY_MCP_KEEP_CONNECTED=true)')
|
|
18
|
+
.option('--transport <method>', 'Transport method: streamableHttp or stdio (sets UNITY_MCP_TRANSPORT)')
|
|
19
|
+
.option('--start-server <value>', 'Set to true/false to control server auto-start (sets UNITY_MCP_START_SERVER)', undefined)
|
|
10
20
|
.action(async (positionalPath, options) => {
|
|
11
21
|
const resolvedPath = positionalPath ?? options.path;
|
|
12
22
|
if (!resolvedPath) {
|
|
13
|
-
|
|
23
|
+
ui.error('Path is required. Usage: unity-mcp-cli open <path> or --path <path>');
|
|
14
24
|
process.exit(1);
|
|
15
25
|
}
|
|
16
26
|
const projectPath = path.resolve(resolvedPath);
|
|
17
27
|
if (!fs.existsSync(projectPath)) {
|
|
18
|
-
|
|
28
|
+
ui.error(`Project path does not exist: ${projectPath}`);
|
|
19
29
|
process.exit(1);
|
|
20
30
|
}
|
|
31
|
+
verbose(`open invoked for project: ${projectPath}`);
|
|
32
|
+
verbose(`--no-connect: ${options.connect === false}`);
|
|
21
33
|
// Determine editor version
|
|
22
34
|
let version = options.unity;
|
|
23
35
|
if (!version) {
|
|
24
36
|
version = getProjectEditorVersion(projectPath) ?? undefined;
|
|
25
37
|
if (version) {
|
|
26
|
-
|
|
38
|
+
ui.info(`Detected editor version from project: ${version}`);
|
|
39
|
+
verbose(`Resolved editor version from ProjectVersion.txt: ${version}`);
|
|
27
40
|
}
|
|
28
41
|
}
|
|
42
|
+
const spinner = ui.startSpinner('Locating Unity Editor...');
|
|
29
43
|
const editorPath = await findEditorPath(version);
|
|
30
44
|
if (!editorPath) {
|
|
31
|
-
|
|
32
|
-
|
|
45
|
+
spinner.stop();
|
|
46
|
+
printEditorNotFoundHelp(version, 'open');
|
|
33
47
|
process.exit(1);
|
|
34
48
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
49
|
+
spinner.success('Unity Editor located');
|
|
50
|
+
verbose(`Editor path: ${editorPath}`);
|
|
51
|
+
// Build environment variables for MCP connection (unless --no-connect)
|
|
52
|
+
const useConnect = options.connect !== false;
|
|
53
|
+
let env;
|
|
54
|
+
if (useConnect) {
|
|
55
|
+
const envVars = {};
|
|
56
|
+
if (options.url) {
|
|
57
|
+
envVars['UNITY_MCP_HOST'] = options.url;
|
|
58
|
+
}
|
|
59
|
+
if (options.keepConnected) {
|
|
60
|
+
envVars['UNITY_MCP_KEEP_CONNECTED'] = 'true';
|
|
61
|
+
}
|
|
62
|
+
if (options.tools) {
|
|
63
|
+
envVars['UNITY_MCP_TOOLS'] = options.tools;
|
|
64
|
+
}
|
|
65
|
+
if (options.token) {
|
|
66
|
+
envVars['UNITY_MCP_TOKEN'] = options.token;
|
|
67
|
+
}
|
|
68
|
+
if (options.auth) {
|
|
69
|
+
if (options.auth !== 'none' && options.auth !== 'required') {
|
|
70
|
+
ui.error('--auth must be "none" or "required"');
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
73
|
+
envVars['UNITY_MCP_AUTH_OPTION'] = options.auth;
|
|
74
|
+
}
|
|
75
|
+
if (options.transport) {
|
|
76
|
+
if (options.transport !== 'streamableHttp' && options.transport !== 'stdio') {
|
|
77
|
+
ui.error('--transport must be "streamableHttp" or "stdio"');
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
envVars['UNITY_MCP_TRANSPORT'] = options.transport;
|
|
81
|
+
}
|
|
82
|
+
if (options.startServer !== undefined) {
|
|
83
|
+
const val = options.startServer.toLowerCase();
|
|
84
|
+
if (val !== 'true' && val !== 'false') {
|
|
85
|
+
ui.error('--start-server must be "true" or "false"');
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
88
|
+
envVars['UNITY_MCP_START_SERVER'] = val;
|
|
89
|
+
}
|
|
90
|
+
if (Object.keys(envVars).length > 0) {
|
|
91
|
+
env = envVars;
|
|
92
|
+
ui.heading('Connection Details');
|
|
93
|
+
ui.label('Project', projectPath);
|
|
94
|
+
ui.label('Editor', editorPath);
|
|
95
|
+
ui.heading('Environment Variables');
|
|
96
|
+
for (const [key, value] of Object.entries(envVars)) {
|
|
97
|
+
const display = key === 'UNITY_MCP_TOKEN' ? '***' : value;
|
|
98
|
+
ui.label(key, display);
|
|
99
|
+
verbose(`Setting ${key}=${display}`);
|
|
100
|
+
}
|
|
101
|
+
ui.divider();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
verbose('MCP connection disabled via --no-connect');
|
|
106
|
+
}
|
|
107
|
+
ui.label('Project', projectPath);
|
|
108
|
+
ui.label('Editor', editorPath);
|
|
109
|
+
launchEditor(editorPath, projectPath, env);
|
|
38
110
|
});
|
|
39
111
|
//# 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,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAC1H,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,8LAA8L,CAAC;KAC3M,QAAQ,CAAC,QAAQ,EAAE,2BAA2B,CAAC;KAC/C,MAAM,CAAC,eAAe,EAAE,2BAA2B,CAAC;KACpD,MAAM,CAAC,mBAAmB,EAAE,sCAAsC,CAAC;KACnE,MAAM,CAAC,cAAc,EAAE,mDAAmD,CAAC;KAC3E,MAAM,CAAC,aAAa,EAAE,oDAAoD,CAAC;KAC3E,MAAM,CAAC,iBAAiB,EAAE,gEAAgE,CAAC;KAC3F,MAAM,CAAC,iBAAiB,EAAE,mCAAmC,CAAC;KAC9D,MAAM,CAAC,iBAAiB,EAAE,4DAA4D,CAAC;KACvF,MAAM,CAAC,kBAAkB,EAAE,2DAA2D,CAAC;KACvF,MAAM,CAAC,sBAAsB,EAAE,sEAAsE,CAAC;KACtG,MAAM,CAAC,wBAAwB,EAAE,8EAA8E,EAAE,SAAS,CAAC;KAC3H,MAAM,CAAC,KAAK,EAAE,cAAkC,EAAE,OAWlD,EAAE,EAAE;IACH,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,OAAO,CAAC,6BAA6B,WAAW,EAAE,CAAC,CAAC;IACpD,OAAO,CAAC,iBAAiB,OAAO,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC;IAEtD,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;YAC5D,OAAO,CAAC,oDAAoD,OAAO,EAAE,CAAC,CAAC;QACzE,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,EAAE,CAAC;QACf,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACxC,OAAO,CAAC,gBAAgB,UAAU,EAAE,CAAC,CAAC;IAEtC,uEAAuE;IACvE,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,KAAK,KAAK,CAAC;IAC7C,IAAI,GAAuC,CAAC;IAE5C,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,OAAO,GAA2B,EAAE,CAAC;QAE3C,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;QAC1C,CAAC;QAED,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YAC1B,OAAO,CAAC,0BAA0B,CAAC,GAAG,MAAM,CAAC;QAC/C,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;QAC7C,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;QAC7C,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC3D,EAAE,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;gBAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,OAAO,CAAC,uBAAuB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;QAClD,CAAC;QAED,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,IAAI,OAAO,CAAC,SAAS,KAAK,gBAAgB,IAAI,OAAO,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;gBAC5E,EAAE,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;gBAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,OAAO,CAAC,qBAAqB,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;QACrD,CAAC;QAED,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACtC,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;YAC9C,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;gBACtC,EAAE,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;gBACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,OAAO,CAAC,wBAAwB,CAAC,GAAG,GAAG,CAAC;QAC1C,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,GAAG,GAAG,OAAO,CAAC;YACd,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;YACjC,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YACjC,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YAE/B,EAAE,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;YACpC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACnD,MAAM,OAAO,GAAG,GAAG,KAAK,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;gBAC1D,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gBACvB,OAAO,CAAC,WAAW,GAAG,IAAI,OAAO,EAAE,CAAC,CAAC;YACvC,CAAC;YACD,EAAE,CAAC,OAAO,EAAE,CAAC;QACf,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,0CAA0C,CAAC,CAAC;IACtD,CAAC;IAED,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,EAAE,GAAG,CAAC,CAAC;AAC7C,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
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
|
+
import { verbose } from '../utils/ui.js';
|
|
7
|
+
export const removePluginCommand = new Command('remove-plugin')
|
|
8
|
+
.description('Remove Unity-MCP plugin from a Unity project')
|
|
9
|
+
.argument('[path]', 'Path to the Unity project')
|
|
10
|
+
.option('--path <path>', 'Path to the Unity project')
|
|
11
|
+
.action(async (positionalPath, options) => {
|
|
12
|
+
const resolvedPath = positionalPath ?? options.path;
|
|
13
|
+
if (!resolvedPath) {
|
|
14
|
+
ui.error('Path is required. Usage: unity-mcp-cli remove-plugin <path> or --path <path>');
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
const projectPath = path.resolve(resolvedPath);
|
|
18
|
+
// Validate project exists
|
|
19
|
+
const manifestPath = path.join(projectPath, 'Packages', 'manifest.json');
|
|
20
|
+
if (!fs.existsSync(manifestPath)) {
|
|
21
|
+
ui.error(`Not a valid Unity project (missing Packages/manifest.json): ${projectPath}`);
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
verbose(`Manifest path: ${manifestPath}`);
|
|
25
|
+
ui.info(`Removing Unity-MCP plugin from: ${projectPath}`);
|
|
26
|
+
removePluginFromManifest(projectPath);
|
|
27
|
+
ui.success('Done!');
|
|
28
|
+
});
|
|
29
|
+
//# 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;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,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,OAAO,CAAC,kBAAkB,YAAY,EAAE,CAAC,CAAC;IAC1C,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,49 @@
|
|
|
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
|
-
import {
|
|
8
|
+
import { removePluginCommand } from './commands/remove-plugin.js';
|
|
9
|
+
import { configureStyledHelp, error as uiError, setVerbose } from './utils/ui.js';
|
|
9
10
|
const require = createRequire(import.meta.url);
|
|
10
11
|
const pkg = require('../package.json');
|
|
11
12
|
const program = new Command();
|
|
12
13
|
program
|
|
13
14
|
.name('unity-mcp-cli')
|
|
14
15
|
.description('Cross-platform CLI tool for Unity-MCP operations')
|
|
15
|
-
.version(pkg.version)
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
16
|
+
.version(pkg.version)
|
|
17
|
+
.option('-v, --verbose', 'Enable verbose diagnostic output');
|
|
18
|
+
// Register all subcommands
|
|
19
|
+
const subcommands = [
|
|
20
|
+
configureCommand,
|
|
21
|
+
createProjectCommand,
|
|
22
|
+
installPluginCommand,
|
|
23
|
+
installUnityCommand,
|
|
24
|
+
openCommand,
|
|
25
|
+
removePluginCommand,
|
|
26
|
+
];
|
|
27
|
+
for (const cmd of subcommands) {
|
|
28
|
+
cmd.option('-v, --verbose', 'Enable verbose diagnostic output');
|
|
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
|
+
// Wire verbose flag before any command executes
|
|
35
|
+
program.hook('preAction', (_thisCommand, actionCommand) => {
|
|
36
|
+
const opts = actionCommand.optsWithGlobals();
|
|
37
|
+
if (opts.verbose) {
|
|
38
|
+
setVerbose(true);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
// Show help when no command provided
|
|
42
|
+
program.action(() => {
|
|
43
|
+
program.outputHelp();
|
|
44
|
+
});
|
|
45
|
+
program.parseAsync().catch((err) => {
|
|
46
|
+
uiError(err.message || String(err));
|
|
24
47
|
process.exit(1);
|
|
25
48
|
});
|
|
26
49
|
//# 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,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,KAAK,IAAI,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAElF,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;KACpB,MAAM,CAAC,eAAe,EAAE,kCAAkC,CAAC,CAAC;AAE/D,2BAA2B;AAC3B,MAAM,WAAW,GAAG;IAClB,gBAAgB;IAChB,oBAAoB;IACpB,oBAAoB;IACpB,mBAAmB;IACnB,WAAW;IACX,mBAAmB;CACpB,CAAC;AAEF,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;IAC9B,GAAG,CAAC,MAAM,CAAC,eAAe,EAAE,kCAAkC,CAAC,CAAC;IAChE,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,gDAAgD;AAChD,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,EAAE;IACxD,MAAM,IAAI,GAAG,aAAa,CAAC,eAAe,EAA2B,CAAC;IACtE,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,UAAU,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,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/manifest.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Resolve the latest plugin version
|
|
2
|
+
* Resolve the latest plugin version from the OpenUPM registry.
|
|
3
|
+
* Throws an error with actionable suggestions if the network request fails.
|
|
3
4
|
*/
|
|
4
5
|
export declare function resolveLatestVersion(): Promise<string>;
|
|
5
6
|
/**
|
|
@@ -12,6 +13,14 @@ export declare function shouldUpdateVersion(currentVersion: string, newVersion:
|
|
|
12
13
|
* Add Unity-MCP plugin to a Unity project's Packages/manifest.json.
|
|
13
14
|
* Ports the C# Installer.Manifest.cs logic:
|
|
14
15
|
* - Adds OpenUPM scoped registry with required scopes
|
|
15
|
-
* - Adds/updates the plugin dependency
|
|
16
|
+
* - Adds/updates the plugin dependency
|
|
17
|
+
* - When force is false (auto-resolved version): never downgrades
|
|
18
|
+
* - When force is true (user-specified --plugin-version): allows downgrade
|
|
16
19
|
*/
|
|
17
|
-
export declare function addPluginToManifest(projectPath: string, version: string): void;
|
|
20
|
+
export declare function addPluginToManifest(projectPath: string, version: string, force?: boolean): void;
|
|
21
|
+
/**
|
|
22
|
+
* Remove Unity-MCP plugin from a Unity project's Packages/manifest.json.
|
|
23
|
+
* Only removes the plugin dependency — scoped registries and scopes are
|
|
24
|
+
* left untouched because other packages may depend on them.
|
|
25
|
+
*/
|
|
26
|
+
export declare function removePluginFromManifest(projectPath: string): void;
|
package/dist/utils/manifest.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
2
|
import * as path from 'path';
|
|
3
|
+
import * as ui from './ui.js';
|
|
3
4
|
const PACKAGE_ID = 'com.ivanmurzak.unity.mcp';
|
|
4
5
|
const REGISTRY_NAME = 'package.openupm.com';
|
|
5
6
|
const REGISTRY_URL = 'https://package.openupm.com';
|
|
@@ -11,38 +12,39 @@ const REQUIRED_SCOPES = [
|
|
|
11
12
|
'org.nuget.system',
|
|
12
13
|
'org.nuget.r3',
|
|
13
14
|
];
|
|
14
|
-
// Hardcoded fallback version (updated on each release)
|
|
15
|
-
const FALLBACK_VERSION = '0.51.6';
|
|
16
15
|
/**
|
|
17
|
-
* Resolve the latest plugin version
|
|
16
|
+
* Resolve the latest plugin version from the OpenUPM registry.
|
|
17
|
+
* Throws an error with actionable suggestions if the network request fails.
|
|
18
18
|
*/
|
|
19
19
|
export async function resolveLatestVersion() {
|
|
20
|
+
const controller = new AbortController();
|
|
21
|
+
const timeout = setTimeout(() => controller.abort(), 5000);
|
|
20
22
|
try {
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
if (
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
if (latest) {
|
|
32
|
-
console.log(`Resolved latest version from OpenUPM: ${latest}`);
|
|
33
|
-
return latest;
|
|
34
|
-
}
|
|
23
|
+
const res = await fetch(`https://package.openupm.com/${PACKAGE_ID}`, {
|
|
24
|
+
signal: controller.signal,
|
|
25
|
+
headers: { Accept: 'application/json' },
|
|
26
|
+
});
|
|
27
|
+
if (res.ok) {
|
|
28
|
+
const data = (await res.json());
|
|
29
|
+
const latest = data?.['dist-tags']?.latest;
|
|
30
|
+
if (latest) {
|
|
31
|
+
ui.info(`Resolved latest version from OpenUPM: ${latest}`);
|
|
32
|
+
return latest;
|
|
35
33
|
}
|
|
36
34
|
}
|
|
37
|
-
|
|
38
|
-
|
|
35
|
+
throw new Error(`OpenUPM returned status ${res.status}. ` +
|
|
36
|
+
'Check your network connection and retry, or specify a version manually with --plugin-version <version>');
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
if (err instanceof Error && err.message.includes('--plugin-version')) {
|
|
40
|
+
throw err;
|
|
39
41
|
}
|
|
42
|
+
throw new Error('Failed to resolve latest plugin version from OpenUPM. ' +
|
|
43
|
+
'Check your network connection and retry, or specify a version manually with --plugin-version <version>');
|
|
40
44
|
}
|
|
41
|
-
|
|
42
|
-
|
|
45
|
+
finally {
|
|
46
|
+
clearTimeout(timeout);
|
|
43
47
|
}
|
|
44
|
-
console.log(`Using fallback version: ${FALLBACK_VERSION}`);
|
|
45
|
-
return FALLBACK_VERSION;
|
|
46
48
|
}
|
|
47
49
|
/**
|
|
48
50
|
* Determines if the version should be updated.
|
|
@@ -78,9 +80,11 @@ export function shouldUpdateVersion(currentVersion, newVersion) {
|
|
|
78
80
|
* Add Unity-MCP plugin to a Unity project's Packages/manifest.json.
|
|
79
81
|
* Ports the C# Installer.Manifest.cs logic:
|
|
80
82
|
* - Adds OpenUPM scoped registry with required scopes
|
|
81
|
-
* - Adds/updates the plugin dependency
|
|
83
|
+
* - Adds/updates the plugin dependency
|
|
84
|
+
* - When force is false (auto-resolved version): never downgrades
|
|
85
|
+
* - When force is true (user-specified --plugin-version): allows downgrade
|
|
82
86
|
*/
|
|
83
|
-
export function addPluginToManifest(projectPath, version) {
|
|
87
|
+
export function addPluginToManifest(projectPath, version, force = false) {
|
|
84
88
|
const manifestPath = path.join(projectPath, 'Packages', 'manifest.json');
|
|
85
89
|
if (!fs.existsSync(manifestPath)) {
|
|
86
90
|
throw new Error(`manifest.json not found at: ${manifestPath}`);
|
|
@@ -121,20 +125,40 @@ export function addPluginToManifest(projectPath, version) {
|
|
|
121
125
|
modified = true;
|
|
122
126
|
}
|
|
123
127
|
const currentVersion = manifest.dependencies[PACKAGE_ID];
|
|
124
|
-
if (!currentVersion || shouldUpdateVersion(currentVersion, version)) {
|
|
128
|
+
if (!currentVersion || force || shouldUpdateVersion(currentVersion, version)) {
|
|
125
129
|
manifest.dependencies[PACKAGE_ID] = version;
|
|
126
130
|
modified = true;
|
|
127
131
|
}
|
|
128
132
|
else {
|
|
129
|
-
|
|
133
|
+
ui.info(`Plugin already at version ${currentVersion} (>= ${version}). Skipping version update. Use --plugin-version to force a specific version.`);
|
|
130
134
|
}
|
|
131
135
|
// --- Write back
|
|
132
136
|
if (modified) {
|
|
133
137
|
fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + '\n');
|
|
134
|
-
|
|
138
|
+
ui.success(`Updated ${manifestPath}`);
|
|
135
139
|
}
|
|
136
140
|
else {
|
|
137
|
-
|
|
141
|
+
ui.info('manifest.json is already up to date.');
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Remove Unity-MCP plugin from a Unity project's Packages/manifest.json.
|
|
146
|
+
* Only removes the plugin dependency — scoped registries and scopes are
|
|
147
|
+
* left untouched because other packages may depend on them.
|
|
148
|
+
*/
|
|
149
|
+
export function removePluginFromManifest(projectPath) {
|
|
150
|
+
const manifestPath = path.join(projectPath, 'Packages', 'manifest.json');
|
|
151
|
+
if (!fs.existsSync(manifestPath)) {
|
|
152
|
+
throw new Error(`manifest.json not found at: ${manifestPath}`);
|
|
153
|
+
}
|
|
154
|
+
const rawJson = fs.readFileSync(manifestPath, 'utf-8');
|
|
155
|
+
const manifest = JSON.parse(rawJson);
|
|
156
|
+
if (!manifest.dependencies || !(PACKAGE_ID in manifest.dependencies)) {
|
|
157
|
+
ui.info('Unity-MCP plugin is not installed. Nothing to remove.');
|
|
158
|
+
return;
|
|
138
159
|
}
|
|
160
|
+
delete manifest.dependencies[PACKAGE_ID];
|
|
161
|
+
fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + '\n');
|
|
162
|
+
ui.success(`Removed ${PACKAGE_ID} from ${manifestPath}`);
|
|
139
163
|
}
|
|
140
164
|
//# 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;
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/utils/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { type Spinner } from 'yocto-spinner';
|
|
2
|
+
import type { Command } from 'commander';
|
|
3
|
+
export declare function setVerbose(enabled: boolean): void;
|
|
4
|
+
export declare function verbose(msg: string): void;
|
|
5
|
+
/**
|
|
6
|
+
* Apply styled help formatting to a Commander command.
|
|
7
|
+
* Call this on every Command instance (root and subcommands)
|
|
8
|
+
* so that --help / -h always renders the fancy UI.
|
|
9
|
+
*
|
|
10
|
+
* @param appVersion - The CLI version string, shown in the root banner.
|
|
11
|
+
*/
|
|
12
|
+
export declare function configureStyledHelp(cmd: Command, appVersion?: string): Command;
|
|
13
|
+
/**
|
|
14
|
+
* Print a success message with a green checkmark.
|
|
15
|
+
* In non-TTY mode, uses plain text prefix.
|
|
16
|
+
*/
|
|
17
|
+
export declare function success(msg: string): void;
|
|
18
|
+
/**
|
|
19
|
+
* Print an error message with a red cross to stderr.
|
|
20
|
+
* In non-TTY mode, uses plain text prefix.
|
|
21
|
+
*/
|
|
22
|
+
export declare function error(msg: string): void;
|
|
23
|
+
/**
|
|
24
|
+
* Print an info message with a blue info symbol.
|
|
25
|
+
* In non-TTY mode, uses plain text prefix.
|
|
26
|
+
*/
|
|
27
|
+
export declare function info(msg: string): void;
|
|
28
|
+
/**
|
|
29
|
+
* Print a warning message with a yellow warning symbol.
|
|
30
|
+
* In non-TTY mode, uses plain text prefix.
|
|
31
|
+
*/
|
|
32
|
+
export declare function warn(msg: string): void;
|
|
33
|
+
/**
|
|
34
|
+
* Print a bold cyan section heading.
|
|
35
|
+
*/
|
|
36
|
+
export declare function heading(msg: string): void;
|
|
37
|
+
/**
|
|
38
|
+
* Print a formatted key-value label.
|
|
39
|
+
*/
|
|
40
|
+
export declare function label(key: string, value: string): void;
|
|
41
|
+
/**
|
|
42
|
+
* Start a spinner with the given text. Returns a wrapped spinner instance
|
|
43
|
+
* whose success/error/warning/info methods add an extra space after the symbol
|
|
44
|
+
* for consistent formatting.
|
|
45
|
+
*
|
|
46
|
+
* In non-TTY environments (CI pipelines, piped output), returns a no-op
|
|
47
|
+
* spinner that outputs plain text without ANSI escape codes.
|
|
48
|
+
*/
|
|
49
|
+
export declare function startSpinner(text: string): Spinner;
|
|
50
|
+
/**
|
|
51
|
+
* Format a status badge (enabled/disabled).
|
|
52
|
+
*/
|
|
53
|
+
export declare function badge(enabled: boolean): string;
|
|
54
|
+
/**
|
|
55
|
+
* Print a feature row with a styled badge and name.
|
|
56
|
+
*/
|
|
57
|
+
export declare function featureRow(name: string, enabled: boolean): void;
|
|
58
|
+
/**
|
|
59
|
+
* Print a divider line.
|
|
60
|
+
*/
|
|
61
|
+
export declare function divider(): void;
|
|
62
|
+
/**
|
|
63
|
+
* A progress bar that overwrites itself on the same line.
|
|
64
|
+
*/
|
|
65
|
+
export interface ProgressBar {
|
|
66
|
+
update(percent: number, status: string): void;
|
|
67
|
+
complete(msg: string): void;
|
|
68
|
+
fail(msg: string): void;
|
|
69
|
+
}
|
|
70
|
+
export declare function createProgressBar(): ProgressBar;
|