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.
Files changed (41) hide show
  1. package/README.md +333 -0
  2. package/bin/{unity-mcp.js → unity-mcp-cli.js} +2 -2
  3. package/dist/commands/configure.js +22 -15
  4. package/dist/commands/configure.js.map +1 -1
  5. package/dist/commands/connect.js +37 -14
  6. package/dist/commands/connect.js.map +1 -1
  7. package/dist/commands/create-project.js +25 -13
  8. package/dist/commands/create-project.js.map +1 -1
  9. package/dist/commands/install-plugin.js +15 -6
  10. package/dist/commands/install-plugin.js.map +1 -1
  11. package/dist/commands/install-unity.d.ts +2 -0
  12. package/dist/commands/install-unity.js +59 -0
  13. package/dist/commands/install-unity.js.map +1 -0
  14. package/dist/commands/open.js +21 -11
  15. package/dist/commands/open.js.map +1 -1
  16. package/dist/commands/remove-plugin.d.ts +2 -0
  17. package/dist/commands/remove-plugin.js +27 -0
  18. package/dist/commands/remove-plugin.js.map +1 -0
  19. package/dist/index.js +26 -10
  20. package/dist/index.js.map +1 -1
  21. package/dist/utils/config.js +5 -5
  22. package/dist/utils/config.js.map +1 -1
  23. package/dist/utils/manifest.d.ts +6 -0
  24. package/dist/utils/manifest.js +40 -13
  25. package/dist/utils/manifest.js.map +1 -1
  26. package/dist/utils/ui.d.ts +50 -0
  27. package/dist/utils/ui.js +136 -0
  28. package/dist/utils/ui.js.map +1 -0
  29. package/dist/utils/unity-editor.d.ts +2 -2
  30. package/dist/utils/unity-editor.js +26 -8
  31. package/dist/utils/unity-editor.js.map +1 -1
  32. package/dist/utils/unity-hub.d.ts +16 -1
  33. package/dist/utils/unity-hub.js +244 -13
  34. package/dist/utils/unity-hub.js.map +1 -1
  35. package/docs/README.es.md +333 -0
  36. package/docs/README.ja.md +333 -0
  37. package/docs/README.zh-CN.md +333 -0
  38. package/package.json +50 -44
  39. package/dist/commands/install-editor.d.ts +0 -2
  40. package/dist/commands/install-editor.js +0 -46
  41. 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
- .requiredOption('--project-path <path>', 'Path to the Unity project')
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 projectPath = path.resolve(options.projectPath);
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
- console.error(`Error: Not a valid Unity project (missing Packages/manifest.json): ${projectPath}`);
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
- console.log(`Installing Unity-MCP plugin v${version} into: ${projectPath}`);
31
+ ui.info(`Installing Unity-MCP plugin v${version} into: ${projectPath}`);
23
32
  addPluginToManifest(projectPath, version);
24
- console.log('Done! Open the project in Unity Editor to complete installation.');
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;AAEjF,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,OAAO,CAAC,gBAAgB,CAAC;KAC9D,WAAW,CAAC,+CAA+C,CAAC;KAC5D,cAAc,CAAC,uBAAuB,EAAE,2BAA2B,CAAC;KACpE,MAAM,CAAC,4BAA4B,EAAE,6CAA6C,CAAC;KACnF,MAAM,CAAC,KAAK,EAAE,OAAwD,EAAE,EAAE;IACzE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAEtD,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,OAAO,CAAC,KAAK,CAAC,sEAAsE,WAAW,EAAE,CAAC,CAAC;QACnG,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,OAAO,GAAG,MAAM,oBAAoB,EAAE,CAAC;IACzC,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,gCAAgC,OAAO,UAAU,WAAW,EAAE,CAAC,CAAC;IAC5E,mBAAmB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC;AAClF,CAAC,CAAC,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,2 @@
1
+ import { Command } from 'commander';
2
+ export declare const installUnityCommand: Command;
@@ -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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"}
@@ -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
- .requiredOption('--project-path <path>', 'Path to the Unity project')
8
- .option('--editor-version <version>', 'Specific Unity Editor version to use')
9
- .action(async (options) => {
10
- const projectPath = path.resolve(options.projectPath);
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
- console.error(`Error: Project path does not exist: ${projectPath}`);
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.editorVersion;
23
+ let version = options.unity;
17
24
  if (!version) {
18
25
  version = getProjectEditorVersion(projectPath) ?? undefined;
19
26
  if (version) {
20
- console.log(`Detected editor version from project: ${version}`);
27
+ ui.info(`Detected editor version from project: ${version}`);
21
28
  }
22
29
  }
23
- const editorPath = findEditorPath(version);
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
- console.error(`Error: Unity Editor not found${versionMsg}. Install it with: unity-mcp install-editor --version <version>`);
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
- console.log(`Opening project: ${projectPath}`);
30
- console.log(`Using editor: ${editorPath}`);
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;AAEjG,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,sCAAsC,CAAC;KACnD,cAAc,CAAC,uBAAuB,EAAE,2BAA2B,CAAC;KACpE,MAAM,CAAC,4BAA4B,EAAE,sCAAsC,CAAC;KAC5E,MAAM,CAAC,KAAK,EAAE,OAAwD,EAAE,EAAE;IACzE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAEtD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,uCAAuC,WAAW,EAAE,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,2BAA2B;IAC3B,IAAI,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;IACpC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,uBAAuB,CAAC,WAAW,CAAC,IAAI,SAAS,CAAC;QAC5D,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,yCAAyC,OAAO,EAAE,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAC3C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,aAAa,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,OAAO,CAAC,KAAK,CAAC,gCAAgC,UAAU,iEAAiE,CAAC,CAAC;QAC3H,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,oBAAoB,WAAW,EAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,iBAAiB,UAAU,EAAE,CAAC,CAAC;IAC3C,YAAY,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AACxC,CAAC,CAAC,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,2 @@
1
+ import { Command } from 'commander';
2
+ export declare const removePluginCommand: Command;
@@ -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 { installEditorCommand } from './commands/install-editor.js';
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
- program.addCommand(createProjectCommand);
17
- program.addCommand(installEditorCommand);
18
- program.addCommand(openCommand);
19
- program.addCommand(installPluginCommand);
20
- program.addCommand(configureCommand);
21
- program.addCommand(connectCommand);
22
- program.parseAsync().catch((error) => {
23
- console.error(error);
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,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,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;AAEvD,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,WAAW,CAAC;KACjB,WAAW,CAAC,kDAAkD,CAAC;KAC/D,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAExB,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;AACzC,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;AACzC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;AACzC,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AAEnC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACnC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
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"}
@@ -40,9 +40,9 @@ export function readConfig(projectPath) {
40
40
  }
41
41
  catch (err) {
42
42
  if (err instanceof SyntaxError) {
43
- console.error(`Malformed JSON in config file: ${configPath}\n${err.message}`);
43
+ throw new SyntaxError(`Malformed JSON in config file: ${configPath}\n${err.message}`);
44
44
  }
45
- return null;
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
- const existing = readConfig(projectPath);
65
- if (existing)
66
- return existing;
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;
@@ -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,OAAO,CAAC,KAAK,CAAC,kCAAkC,UAAU,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,WAAmB,EAAE,MAA6B;IAC5E,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACvE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACzC,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,MAAM,MAAM,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAChD,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAC5B,MAA6B,EAC7B,WAA8C,EAC9C,OAKC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAiB,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;QACvD,CAAC,CAAC,WAAW,CAAC,MAAM,CAChB,CAAC,CAAC,EAAmB,EAAE,CACrB,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,SAAS,CACtG;QACH,CAAC,CAAC,EAAE,CAAC;IAEP,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,KAAK,MAAM,CAAC,IAAI,QAAQ;YAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;QAC3C,MAAM,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,IAAI,QAAQ;YAAE,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;QAC5C,MAAM,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YACvD,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YACvD,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
@@ -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;
@@ -1,6 +1,6 @@
1
1
  import * as fs from 'fs';
2
2
  import * as path from 'path';
3
- import semver from 'semver';
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.51.6';
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
- console.log(`Resolved latest version from OpenUPM: ${latest}`);
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
- console.log(`Using fallback version: ${FALLBACK_VERSION}`);
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 current = semver.valid(semver.coerce(currentVersion));
64
- const target = semver.valid(semver.coerce(newVersion));
65
- if (current && target) {
66
- return semver.gt(target, current);
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
- // Fallback to string comparison
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
- console.log(`Plugin already at version ${currentVersion} (>= ${version}). Skipping version update.`);
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
- console.log(`Updated ${manifestPath}`);
135
+ ui.success(`Updated ${manifestPath}`);
129
136
  }
130
137
  else {
131
- console.log('manifest.json is already up to date.');
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,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,UAAU,GAAG,0BAA0B,CAAC;AAC9C,MAAM,aAAa,GAAG,qBAAqB,CAAC;AAC5C,MAAM,YAAY,GAAG,6BAA6B,CAAC;AACnD,MAAM,eAAe,GAAG;IACtB,gBAAgB;IAChB,kBAAkB;IAClB,0BAA0B;IAC1B,qBAAqB;IACrB,kBAAkB;IAClB,cAAc;CACf,CAAC;AAEF,uDAAuD;AACvD,MAAM,gBAAgB,GAAG,QAAQ,CAAC;AAclC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;QAE3D,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,+BAA+B,UAAU,EAAE,EAAE;gBACnE,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;aACxC,CAAC,CAAC;YAEH,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;gBACX,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA0C,CAAC;gBACzE,MAAM,MAAM,GAAG,IAAI,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;gBAC3C,IAAI,MAAM,EAAE,CAAC;oBACX,OAAO,CAAC,GAAG,CAAC,yCAAyC,MAAM,EAAE,CAAC,CAAC;oBAC/D,OAAO,MAAM,CAAC;gBAChB,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,+DAA+D;IACjE,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,2BAA2B,gBAAgB,EAAE,CAAC,CAAC;IAC3D,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,cAAsB,EAAE,UAAkB;IAC5E,IAAI,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC;IACjC,IAAI,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IAE9B,uEAAuE;IACvE,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC/D,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QAC1E,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IAEvD,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;QACtB,OAAO,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,CAAC;IAED,gCAAgC;IAChC,OAAO,UAAU,CAAC,aAAa,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AACtD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB,EAAE,OAAe;IACtE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;IAEzE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,+BAA+B,YAAY,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAa,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,2CAA2C;IAC3C,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;QAC/B,QAAQ,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC/B,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC;IAED,0CAA0C;IAC1C,IAAI,eAAe,GAAG,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAClD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAChC,CAAC;IAEF,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,eAAe,GAAG;YAChB,IAAI,EAAE,aAAa;YACnB,GAAG,EAAE,YAAY;YACjB,MAAM,EAAE,EAAE;SACX,CAAC;QACF,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAChD,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC;IAED,yBAAyB;IACzB,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;QAC5B,eAAe,CAAC,MAAM,GAAG,EAAE,CAAC;QAC5B,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;QACpC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5C,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;IACH,CAAC;IAED,6DAA6D;IAC7D,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;QAC3B,QAAQ,CAAC,YAAY,GAAG,EAAE,CAAC;QAC3B,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC;IAED,MAAM,cAAc,GAAG,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IACzD,IAAI,CAAC,cAAc,IAAI,mBAAmB,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,CAAC;QACpE,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC;QAC5C,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CACT,6BAA6B,cAAc,QAAQ,OAAO,6BAA6B,CACxF,CAAC;IACJ,CAAC;IAED,iBAAiB;IACjB,IAAI,QAAQ,EAAE,CAAC;QACb,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,WAAW,YAAY,EAAE,CAAC,CAAC;IACzC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IACtD,CAAC;AACH,CAAC"}
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;