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.
Files changed (39) hide show
  1. package/README.md +85 -66
  2. package/dist/commands/configure.js +17 -13
  3. package/dist/commands/configure.js.map +1 -1
  4. package/dist/commands/create-project.js +17 -5
  5. package/dist/commands/create-project.js.map +1 -1
  6. package/dist/commands/install-plugin.js +20 -6
  7. package/dist/commands/install-plugin.js.map +1 -1
  8. package/dist/commands/install-unity.d.ts +2 -0
  9. package/dist/commands/install-unity.js +72 -0
  10. package/dist/commands/install-unity.js.map +1 -0
  11. package/dist/commands/open.js +82 -10
  12. package/dist/commands/open.js.map +1 -1
  13. package/dist/commands/remove-plugin.d.ts +2 -0
  14. package/dist/commands/remove-plugin.js +29 -0
  15. package/dist/commands/remove-plugin.js.map +1 -0
  16. package/dist/index.js +34 -11
  17. package/dist/index.js.map +1 -1
  18. package/dist/utils/manifest.d.ts +12 -3
  19. package/dist/utils/manifest.js +53 -29
  20. package/dist/utils/manifest.js.map +1 -1
  21. package/dist/utils/ui.d.ts +70 -0
  22. package/dist/utils/ui.js +288 -0
  23. package/dist/utils/ui.js.map +1 -0
  24. package/dist/utils/unity-editor.d.ts +5 -0
  25. package/dist/utils/unity-editor.js +49 -3
  26. package/dist/utils/unity-editor.js.map +1 -1
  27. package/dist/utils/unity-hub.d.ts +29 -1
  28. package/dist/utils/unity-hub.js +291 -22
  29. package/dist/utils/unity-hub.js.map +1 -1
  30. package/docs/README.es.md +333 -0
  31. package/docs/README.ja.md +333 -0
  32. package/docs/README.zh-CN.md +333 -0
  33. package/package.json +3 -3
  34. package/dist/commands/connect.d.ts +0 -2
  35. package/dist/commands/connect.js +0 -81
  36. package/dist/commands/connect.js.map +0 -1
  37. package/dist/commands/install-editor.d.ts +0 -2
  38. package/dist/commands/install-editor.js +0 -49
  39. package/dist/commands/install-editor.js.map +0 -1
@@ -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
- console.error('Error: Path is required. Usage: unity-mcp-cli open <path> or --path <path>');
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
- console.error(`Error: Project path does not exist: ${projectPath}`);
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
- console.log(`Detected editor version from project: ${version}`);
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
- const versionMsg = version ? ` (version ${version})` : '';
32
- console.error(`Error: Unity Editor not found${versionMsg}. Install it with: unity-mcp-cli install-editor --version <version>`);
45
+ spinner.stop();
46
+ printEditorNotFoundHelp(version, 'open');
33
47
  process.exit(1);
34
48
  }
35
- console.log(`Opening project: ${projectPath}`);
36
- console.log(`Using editor: ${editorPath}`);
37
- launchEditor(editorPath, projectPath);
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;AAEjG,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,OAAO,CAAC,KAAK,CAAC,4EAA4E,CAAC,CAAC;QAC5F,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,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,KAAK,CAAC;IAC5B,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,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;IACjD,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,qEAAqE,CAAC,CAAC;QAC/H,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":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare const removePluginCommand: Command;
@@ -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 { 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
- import { connectCommand } from './commands/connect.js';
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
- 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);
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,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,eAAe,CAAC;KACrB,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,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"}
@@ -1,5 +1,6 @@
1
1
  /**
2
- * Resolve the latest plugin version. Tries OpenUPM API first, falls back to hardcoded 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 (never downgrades)
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;
@@ -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. Tries OpenUPM API first, falls back to hardcoded 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 controller = new AbortController();
22
- const timeout = setTimeout(() => controller.abort(), 5000);
23
- try {
24
- const res = await fetch(`https://package.openupm.com/${PACKAGE_ID}`, {
25
- signal: controller.signal,
26
- headers: { Accept: 'application/json' },
27
- });
28
- if (res.ok) {
29
- const data = (await res.json());
30
- const latest = data?.['dist-tags']?.latest;
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
- finally {
38
- clearTimeout(timeout);
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
- catch {
42
- // Network error or timeout — fall through to hardcoded version
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 (never downgrades)
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
- console.log(`Plugin already at version ${currentVersion} (>= ${version}). Skipping version update.`);
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
- console.log(`Updated ${manifestPath}`);
138
+ ui.success(`Updated ${manifestPath}`);
135
139
  }
136
140
  else {
137
- console.log('manifest.json is already up to date.');
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;AAE7B,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,WAAW,GAAG,eAAe,CAAC;IACpC,IAAI,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACrE,MAAM,YAAY,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3D,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QAC9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC/B,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,UAAU,CAAC,WAAW,EAAE,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;AACjE,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":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,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;AAcF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;IAE3D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,+BAA+B,UAAU,EAAE,EAAE;YACnE,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;SACxC,CAAC,CAAC;QAEH,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;YACX,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA0C,CAAC;YACzE,MAAM,MAAM,GAAG,IAAI,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;YAC3C,IAAI,MAAM,EAAE,CAAC;gBACX,EAAE,CAAC,IAAI,CAAC,yCAAyC,MAAM,EAAE,CAAC,CAAC;gBAC3D,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAED,MAAM,IAAI,KAAK,CACb,2BAA2B,GAAG,CAAC,MAAM,IAAI;YACzC,wGAAwG,CACzG,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACrE,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,MAAM,IAAI,KAAK,CACb,wDAAwD;YACxD,wGAAwG,CACzG,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;AACH,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,WAAW,GAAG,eAAe,CAAC;IACpC,IAAI,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACrE,MAAM,YAAY,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3D,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QAC9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC/B,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,UAAU,CAAC,WAAW,EAAE,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;AACjE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB,EAAE,OAAe,EAAE,KAAK,GAAG,KAAK;IACrF,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,KAAK,IAAI,mBAAmB,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,CAAC;QAC7E,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC;QAC5C,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC;SAAM,CAAC;QACN,EAAE,CAAC,IAAI,CACL,6BAA6B,cAAc,QAAQ,OAAO,+EAA+E,CAC1I,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,EAAE,CAAC,OAAO,CAAC,WAAW,YAAY,EAAE,CAAC,CAAC;IACxC,CAAC;SAAM,CAAC;QACN,EAAE,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,WAAmB;IAC1D,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;IAE/C,IAAI,CAAC,QAAQ,CAAC,YAAY,IAAI,CAAC,CAAC,UAAU,IAAI,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACrE,EAAE,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IAED,OAAO,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IACzC,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACzE,EAAE,CAAC,OAAO,CAAC,WAAW,UAAU,SAAS,YAAY,EAAE,CAAC,CAAC;AAC3D,CAAC"}
@@ -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;