unity-mcp-cli 0.69.1 → 0.70.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/dist/commands/open.d.ts +10 -13
- package/dist/commands/open.js +170 -118
- package/dist/commands/open.js.map +1 -1
- package/dist/lib/open.d.ts +50 -0
- package/dist/lib/open.js +303 -0
- package/dist/lib/open.js.map +1 -0
- package/dist/lib/types.d.ts +139 -0
- package/dist/lib.d.ts +2 -1
- package/dist/lib.js +1 -0
- package/dist/lib.js.map +1 -1
- package/dist/utils/unity-editor.d.ts +17 -3
- package/dist/utils/unity-editor.js +14 -5
- package/dist/utils/unity-editor.js.map +1 -1
- package/package.json +1 -1
package/dist/commands/open.d.ts
CHANGED
|
@@ -1,22 +1,19 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
+
import { isUnityProjectDir as libIsUnityProjectDir } from '../lib/open.js';
|
|
3
|
+
/**
|
|
4
|
+
* Resolve the project path from the positional argument, `--path` option, or
|
|
5
|
+
* the current working directory when neither is provided.
|
|
6
|
+
*
|
|
7
|
+
* Re-exported from the library helper so existing tests continue to import
|
|
8
|
+
* `resolveOpenProjectPath` from this module.
|
|
9
|
+
*/
|
|
2
10
|
export interface ResolveProjectPathResult {
|
|
3
11
|
/** Absolute, resolved path to the project directory. */
|
|
4
12
|
projectPath: string;
|
|
5
13
|
/** True if no path was supplied and we fell back to `process.cwd()`. */
|
|
6
14
|
usedCwdFallback: boolean;
|
|
7
15
|
}
|
|
8
|
-
/**
|
|
9
|
-
* Resolve the project path from the positional argument, `--path` option, or
|
|
10
|
-
* the current working directory when neither is provided.
|
|
11
|
-
*
|
|
12
|
-
* Exported for unit testing.
|
|
13
|
-
*/
|
|
14
16
|
export declare function resolveOpenProjectPath(positionalPath: string | undefined, optionPath: string | undefined, cwd: string): ResolveProjectPathResult;
|
|
15
|
-
/**
|
|
16
|
-
|
|
17
|
-
* an `Assets/` directory and a `ProjectSettings/ProjectVersion.txt` file.
|
|
18
|
-
*
|
|
19
|
-
* Exported for unit testing.
|
|
20
|
-
*/
|
|
21
|
-
export declare function isUnityProjectDir(projectPath: string): boolean;
|
|
17
|
+
/** Re-export for backward compatibility with existing tests. */
|
|
18
|
+
export declare const isUnityProjectDir: typeof libIsUnityProjectDir;
|
|
22
19
|
export declare const openCommand: Command;
|
package/dist/commands/open.js
CHANGED
|
@@ -1,35 +1,54 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
import * as path from 'path';
|
|
3
|
-
import
|
|
4
|
-
import { findEditorPath, getProjectEditorVersion, launchEditor, printEditorNotFoundHelp } from '../utils/unity-editor.js';
|
|
3
|
+
import { findUnityHub, listInstalledEditors } from '../utils/unity-hub.js';
|
|
5
4
|
import { findUnityProcess } from '../utils/unity-process.js';
|
|
6
5
|
import * as ui from '../utils/ui.js';
|
|
7
6
|
import { verbose } from '../utils/ui.js';
|
|
8
|
-
import {
|
|
9
|
-
/**
|
|
10
|
-
* Resolve the project path from the positional argument, `--path` option, or
|
|
11
|
-
* the current working directory when neither is provided.
|
|
12
|
-
*
|
|
13
|
-
* Exported for unit testing.
|
|
14
|
-
*/
|
|
7
|
+
import { openProject, resolveProjectPath as libResolveProjectPath, isUnityProjectDir as libIsUnityProjectDir, } from '../lib/open.js';
|
|
15
8
|
export function resolveOpenProjectPath(positionalPath, optionPath, cwd) {
|
|
9
|
+
// The CLI takes both a positional `[path]` AND an `--path` flag; the
|
|
10
|
+
// library helper only takes a single `optionPath`. Collapse the two
|
|
11
|
+
// CLI inputs (positional wins) before delegating.
|
|
16
12
|
const explicit = positionalPath ?? optionPath;
|
|
17
|
-
|
|
18
|
-
return {
|
|
19
|
-
projectPath: path.resolve(resolvedPath),
|
|
20
|
-
usedCwdFallback: explicit === undefined,
|
|
21
|
-
};
|
|
13
|
+
return libResolveProjectPath(explicit, cwd);
|
|
22
14
|
}
|
|
15
|
+
/** Re-export for backward compatibility with existing tests. */
|
|
16
|
+
export const isUnityProjectDir = libIsUnityProjectDir;
|
|
23
17
|
/**
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
18
|
+
* Print actionable help when a required Unity Editor version is not found.
|
|
19
|
+
* Lists installed editors and suggests install or override commands. Lives
|
|
20
|
+
* here (next to the CLI command) instead of `unity-editor.ts` because it
|
|
21
|
+
* writes to the chalk-styled `ui` and we want to keep the `unity-editor.ts`
|
|
22
|
+
* helpers library-safe.
|
|
28
23
|
*/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
24
|
+
function printEditorNotFoundHelp(requestedVersion, commandName) {
|
|
25
|
+
if (requestedVersion) {
|
|
26
|
+
ui.error(`Unity Editor ${requestedVersion} is not installed.`);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
ui.error('No Unity Editor found.');
|
|
30
|
+
}
|
|
31
|
+
ui.heading('Options:');
|
|
32
|
+
if (requestedVersion) {
|
|
33
|
+
ui.info(`Install it: npx unity-mcp-cli install-unity ${requestedVersion}`);
|
|
34
|
+
}
|
|
35
|
+
ui.info('Install latest stable: npx unity-mcp-cli install-unity');
|
|
36
|
+
const hubPath = findUnityHub();
|
|
37
|
+
if (hubPath) {
|
|
38
|
+
const editors = listInstalledEditors(hubPath);
|
|
39
|
+
if (editors.length > 0) {
|
|
40
|
+
ui.heading('Installed editors:');
|
|
41
|
+
for (const editor of editors) {
|
|
42
|
+
ui.label(editor.version, editor.path);
|
|
43
|
+
}
|
|
44
|
+
if (requestedVersion) {
|
|
45
|
+
const hint = commandName === 'connect'
|
|
46
|
+
? `npx unity-mcp-cli ${commandName} --unity ${editors[0].version} --path <path> --url <url>`
|
|
47
|
+
: `npx unity-mcp-cli ${commandName} <path> --unity ${editors[0].version}`;
|
|
48
|
+
ui.info(`Use a different version: ${hint}`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
33
52
|
}
|
|
34
53
|
export const openCommand = new Command('open')
|
|
35
54
|
.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.')
|
|
@@ -45,16 +64,19 @@ export const openCommand = new Command('open')
|
|
|
45
64
|
.option('--transport <method>', 'Transport method: streamableHttp or stdio (sets UNITY_MCP_TRANSPORT)')
|
|
46
65
|
.option('--start-server <value>', 'Set to true/false to control server auto-start (sets UNITY_MCP_START_SERVER)', undefined)
|
|
47
66
|
.action(async (positionalPath, options) => {
|
|
67
|
+
// Resolve the path the same way the library does, but also
|
|
68
|
+
// validate the existence + Unity-project shape up front so we
|
|
69
|
+
// can emit the historical, friendlier "Current directory is
|
|
70
|
+
// not a Unity project" message when the cwd-fallback was used.
|
|
71
|
+
// The library always reports the underlying error string, but
|
|
72
|
+
// the CLI is allowed to render two different variants.
|
|
48
73
|
const { projectPath, usedCwdFallback } = resolveOpenProjectPath(positionalPath, options.path, process.cwd());
|
|
74
|
+
const fs = await import('fs');
|
|
49
75
|
if (!fs.existsSync(projectPath)) {
|
|
50
76
|
ui.error(`Project path does not exist: ${projectPath}`);
|
|
51
77
|
process.exit(1);
|
|
52
78
|
}
|
|
53
|
-
|
|
54
|
-
// presence of both `Assets/` and `ProjectSettings/ProjectVersion.txt`
|
|
55
|
-
// to avoid launching the Editor against an unrelated folder — this
|
|
56
|
-
// matters most when the user omits the path and we fall back to cwd.
|
|
57
|
-
if (!isUnityProjectDir(projectPath)) {
|
|
79
|
+
if (!libIsUnityProjectDir(projectPath)) {
|
|
58
80
|
if (usedCwdFallback) {
|
|
59
81
|
ui.error(`Current directory is not a Unity project: ${projectPath}`);
|
|
60
82
|
ui.info('Run this command from a Unity project folder, or pass a path: unity-mcp-cli open <path>');
|
|
@@ -69,107 +91,137 @@ export const openCommand = new Command('open')
|
|
|
69
91
|
}
|
|
70
92
|
verbose(`open invoked for project: ${projectPath}`);
|
|
71
93
|
verbose(`--no-connect: ${options.connect === false}`);
|
|
72
|
-
//
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
ui.
|
|
77
|
-
process.exit(
|
|
78
|
-
}
|
|
79
|
-
// Determine editor version
|
|
80
|
-
let version = options.unity;
|
|
81
|
-
if (!version) {
|
|
82
|
-
version = getProjectEditorVersion(projectPath) ?? undefined;
|
|
83
|
-
if (version) {
|
|
84
|
-
ui.info(`Detected editor version from project: ${version}`);
|
|
85
|
-
verbose(`Resolved editor version from ProjectVersion.txt: ${version}`);
|
|
86
|
-
}
|
|
94
|
+
// Validate auth/transport/startServer here — keeps the historical
|
|
95
|
+
// CLI error messages and exit codes (the library reports these
|
|
96
|
+
// as `kind: 'failure'` instead).
|
|
97
|
+
if (options.auth !== undefined && options.auth !== 'none' && options.auth !== 'required') {
|
|
98
|
+
ui.error('--auth must be "none" or "required"');
|
|
99
|
+
process.exit(1);
|
|
87
100
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
if (!editorPath) {
|
|
91
|
-
spinner.stop();
|
|
92
|
-
printEditorNotFoundHelp(version, 'open');
|
|
101
|
+
if (options.transport !== undefined && options.transport !== 'streamableHttp' && options.transport !== 'stdio') {
|
|
102
|
+
ui.error('--transport must be "streamableHttp" or "stdio"');
|
|
93
103
|
process.exit(1);
|
|
94
104
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
const config = readConfig(projectPath);
|
|
102
|
-
if (config && isCloudMode(config) && config.cloudToken) {
|
|
103
|
-
if (!options.keepConnected) {
|
|
104
|
-
options.keepConnected = true;
|
|
105
|
-
verbose('Cloud mode with token detected — auto-enabling keep-connected');
|
|
106
|
-
}
|
|
107
|
-
const skillAutoGenerate = { ...(config.skillAutoGenerate ?? {}) };
|
|
108
|
-
if (!skillAutoGenerate['claude-code']) {
|
|
109
|
-
skillAutoGenerate['claude-code'] = true;
|
|
110
|
-
writeConfig(projectPath, { ...config, skillAutoGenerate });
|
|
111
|
-
verbose('Auto-enabled skill generation for claude-code');
|
|
112
|
-
}
|
|
105
|
+
let startServerBool;
|
|
106
|
+
if (options.startServer !== undefined) {
|
|
107
|
+
const val = options.startServer.toLowerCase();
|
|
108
|
+
if (val !== 'true' && val !== 'false') {
|
|
109
|
+
ui.error('--start-server must be "true" or "false"');
|
|
110
|
+
process.exit(1);
|
|
113
111
|
}
|
|
112
|
+
startServerBool = val === 'true';
|
|
114
113
|
}
|
|
115
|
-
//
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
114
|
+
// Pre-flight already-running check so we don't flash the
|
|
115
|
+
// "Locating Unity Editor..." spinner when Unity is already open
|
|
116
|
+
// for this project. The lib does its own check too (single
|
|
117
|
+
// source of truth for the result shape); this one only suppresses
|
|
118
|
+
// spinner spam in the common already-open case.
|
|
119
|
+
const alreadyRunningPid = findUnityProcess(projectPath)?.pid;
|
|
120
|
+
// Spinner around editor location for parity with the legacy UX.
|
|
121
|
+
let spinner = alreadyRunningPid === undefined
|
|
122
|
+
? ui.startSpinner('Locating Unity Editor...')
|
|
123
|
+
: undefined;
|
|
124
|
+
const result = await openProject({
|
|
125
|
+
projectPath,
|
|
126
|
+
unityVersion: options.unity,
|
|
127
|
+
noConnect: options.connect === false,
|
|
128
|
+
url: options.url,
|
|
129
|
+
token: options.token,
|
|
130
|
+
auth: options.auth,
|
|
131
|
+
tools: options.tools,
|
|
132
|
+
keepConnected: options.keepConnected,
|
|
133
|
+
transport: options.transport,
|
|
134
|
+
startServer: startServerBool,
|
|
135
|
+
onProgress: (event) => {
|
|
136
|
+
switch (event.phase) {
|
|
137
|
+
case 'detecting-editor-version': {
|
|
138
|
+
// unity-version detection is fast — no UI noise needed.
|
|
139
|
+
break;
|
|
140
|
+
}
|
|
141
|
+
case 'editors-located': {
|
|
142
|
+
// Cover the case where editor discovery succeeded — the
|
|
143
|
+
// spinner success message lands on `editor-resolved`,
|
|
144
|
+
// not here, so we don't overwrite the "Locating…" line.
|
|
145
|
+
break;
|
|
146
|
+
}
|
|
147
|
+
case 'editor-resolved': {
|
|
148
|
+
if (spinner) {
|
|
149
|
+
spinner.success('Unity Editor located');
|
|
150
|
+
spinner = undefined;
|
|
151
|
+
}
|
|
152
|
+
verbose(`Editor path: ${event.editorPath}`);
|
|
153
|
+
if (event.version) {
|
|
154
|
+
ui.info(`Detected editor version from project: ${event.version}`);
|
|
155
|
+
verbose(`Resolved editor version from ProjectVersion.txt: ${event.version}`);
|
|
156
|
+
}
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
case 'connection-details': {
|
|
160
|
+
const envVars = event.envVars;
|
|
161
|
+
if (Object.keys(envVars).length > 0) {
|
|
162
|
+
ui.heading('Connection Details');
|
|
163
|
+
ui.label('Project', event.projectPath);
|
|
164
|
+
ui.label('Editor', event.editorPath);
|
|
165
|
+
ui.heading('Environment Variables');
|
|
166
|
+
for (const [key, value] of Object.entries(envVars)) {
|
|
167
|
+
const display = key === 'UNITY_MCP_TOKEN' ? '***' : value;
|
|
168
|
+
ui.label(key, display);
|
|
169
|
+
verbose(`Setting ${key}=${display}`);
|
|
170
|
+
}
|
|
171
|
+
ui.divider();
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
verbose('MCP connection disabled via --no-connect or no options');
|
|
175
|
+
}
|
|
176
|
+
break;
|
|
177
|
+
}
|
|
178
|
+
case 'launching-editor': {
|
|
179
|
+
ui.label('Project', event.projectPath);
|
|
180
|
+
ui.label('Editor', event.editorPath);
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
case 'editor-launched': {
|
|
184
|
+
ui.success(`Launched Unity Editor (PID: ${event.pid ?? 'unknown'})`);
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
default:
|
|
188
|
+
break;
|
|
143
189
|
}
|
|
144
|
-
|
|
190
|
+
},
|
|
191
|
+
});
|
|
192
|
+
if (spinner) {
|
|
193
|
+
// Library returned before emitting `editor-resolved` — most
|
|
194
|
+
// likely failed to locate an editor. Stop the spinner so the
|
|
195
|
+
// error path renders cleanly.
|
|
196
|
+
spinner.stop();
|
|
197
|
+
spinner = undefined;
|
|
198
|
+
}
|
|
199
|
+
if (result.kind === 'failure') {
|
|
200
|
+
// Render the failure with the original CLI surface. Two cases
|
|
201
|
+
// get the rich "no editor found" help; everything else is a
|
|
202
|
+
// plain ui.error.
|
|
203
|
+
if (result.errorMessage.startsWith('Unity Editor') &&
|
|
204
|
+
result.errorMessage.endsWith('is not installed.')) {
|
|
205
|
+
printEditorNotFoundHelp(options.unity, 'open');
|
|
145
206
|
}
|
|
146
|
-
if (
|
|
147
|
-
|
|
148
|
-
if (val !== 'true' && val !== 'false') {
|
|
149
|
-
ui.error('--start-server must be "true" or "false"');
|
|
150
|
-
process.exit(1);
|
|
151
|
-
}
|
|
152
|
-
envVars['UNITY_MCP_START_SERVER'] = val;
|
|
207
|
+
else if (result.errorMessage === 'No Unity Editor found.') {
|
|
208
|
+
printEditorNotFoundHelp(undefined, 'open');
|
|
153
209
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
ui.heading('Connection Details');
|
|
157
|
-
ui.label('Project', projectPath);
|
|
158
|
-
ui.label('Editor', editorPath);
|
|
159
|
-
ui.heading('Environment Variables');
|
|
160
|
-
for (const [key, value] of Object.entries(envVars)) {
|
|
161
|
-
const display = key === 'UNITY_MCP_TOKEN' ? '***' : value;
|
|
162
|
-
ui.label(key, display);
|
|
163
|
-
verbose(`Setting ${key}=${display}`);
|
|
164
|
-
}
|
|
165
|
-
ui.divider();
|
|
210
|
+
else {
|
|
211
|
+
ui.error(result.errorMessage);
|
|
166
212
|
}
|
|
213
|
+
process.exit(1);
|
|
167
214
|
}
|
|
168
|
-
|
|
169
|
-
|
|
215
|
+
// Already-running short-circuit: the library returns success
|
|
216
|
+
// with `alreadyRunning: true`. Preserve the original exit-0 +
|
|
217
|
+
// friendly message.
|
|
218
|
+
if (result.alreadyRunning) {
|
|
219
|
+
ui.success(`Unity is already running with this project (PID: ${result.editorPid ?? 'unknown'})`);
|
|
220
|
+
ui.info('Skipping launch. Use the running instance or close it first.');
|
|
221
|
+
process.exit(0);
|
|
170
222
|
}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
223
|
+
// Path is normally absolute already; resolve defensively for
|
|
224
|
+
// verbose log parity with the legacy CLI.
|
|
225
|
+
verbose(`Resolved project path: ${path.resolve(result.projectPath)}`);
|
|
174
226
|
});
|
|
175
227
|
//# 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,
|
|
1
|
+
{"version":3,"file":"open.js","sourceRoot":"","sources":["../../src/commands/open.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { OpenEnvInputs, OpenProjectOptions, OpenProjectResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Resolve the project path from an explicit option or fall back to
|
|
4
|
+
* the supplied cwd. Always returns an absolute, resolved path plus a
|
|
5
|
+
* flag indicating whether the cwd fallback was used (so the CLI
|
|
6
|
+
* surface can emit a friendlier "no path provided" message).
|
|
7
|
+
*
|
|
8
|
+
* Pure / no I/O — exported for tests and for the CLI command's own
|
|
9
|
+
* use so the two paths can share resolution semantics.
|
|
10
|
+
*/
|
|
11
|
+
export declare function resolveProjectPath(optionPath: string | undefined, cwd: string): {
|
|
12
|
+
projectPath: string;
|
|
13
|
+
usedCwdFallback: boolean;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Returns true if `projectPath` looks like a Unity project — i.e. it
|
|
17
|
+
* contains an `Assets/` directory and a
|
|
18
|
+
* `ProjectSettings/ProjectVersion.txt` file. Pure / no I/O beyond
|
|
19
|
+
* `fs.existsSync`.
|
|
20
|
+
*/
|
|
21
|
+
export declare function isUnityProjectDir(projectPath: string): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Build the env-var map propagated to the editor process when
|
|
24
|
+
* `noConnect !== true`. Pure (returns a fresh object); validates the
|
|
25
|
+
* `auth` and `transport` enums and throws on bad input — the
|
|
26
|
+
* `openProject` boundary catches the throw and returns it as a
|
|
27
|
+
* `{ kind: 'failure' }` result so nothing escapes past the public
|
|
28
|
+
* boundary.
|
|
29
|
+
*
|
|
30
|
+
* Exported for tests so the env-var assembly can be exercised
|
|
31
|
+
* without a real editor launch.
|
|
32
|
+
*/
|
|
33
|
+
export declare function buildOpenEnv(options: OpenEnvInputs): Record<string, string> | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* Open a Unity project in the Unity Editor — the library-callable
|
|
36
|
+
* equivalent of the `open` CLI command. Library-safe: never calls
|
|
37
|
+
* `process.exit`, never prints to stdout / stderr, never throws past
|
|
38
|
+
* the public boundary.
|
|
39
|
+
*
|
|
40
|
+
* The launch logic (Unity-version detection, editor location,
|
|
41
|
+
* project-path validation, environment-variable wiring, editor
|
|
42
|
+
* spawn) is shared with the CLI command — `commands/open.ts`
|
|
43
|
+
* delegates to this function so the two paths cannot drift.
|
|
44
|
+
*
|
|
45
|
+
* Returns a discriminated union — narrow with
|
|
46
|
+
* `result.kind === 'success'` to access `editorPath` / `editorPid`
|
|
47
|
+
* / `unityVersion` / `projectPath`, or `result.kind === 'failure'`
|
|
48
|
+
* to access `errorMessage` / `error`.
|
|
49
|
+
*/
|
|
50
|
+
export declare function openProject(options: OpenProjectOptions): Promise<OpenProjectResult>;
|
package/dist/lib/open.js
ADDED
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { findEditorPath, getProjectEditorVersion, launchEditor, } from '../utils/unity-editor.js';
|
|
4
|
+
import { findUnityProcess } from '../utils/unity-process.js';
|
|
5
|
+
import { readConfig, isCloudMode, writeConfig } from '../utils/config.js';
|
|
6
|
+
import { emitProgress } from './progress.js';
|
|
7
|
+
/**
|
|
8
|
+
* Resolve the project path from an explicit option or fall back to
|
|
9
|
+
* the supplied cwd. Always returns an absolute, resolved path plus a
|
|
10
|
+
* flag indicating whether the cwd fallback was used (so the CLI
|
|
11
|
+
* surface can emit a friendlier "no path provided" message).
|
|
12
|
+
*
|
|
13
|
+
* Pure / no I/O — exported for tests and for the CLI command's own
|
|
14
|
+
* use so the two paths can share resolution semantics.
|
|
15
|
+
*/
|
|
16
|
+
export function resolveProjectPath(optionPath, cwd) {
|
|
17
|
+
const explicit = optionPath;
|
|
18
|
+
const resolvedPath = explicit ?? cwd;
|
|
19
|
+
return {
|
|
20
|
+
projectPath: path.resolve(resolvedPath),
|
|
21
|
+
usedCwdFallback: explicit === undefined,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Returns true if `projectPath` looks like a Unity project — i.e. it
|
|
26
|
+
* contains an `Assets/` directory and a
|
|
27
|
+
* `ProjectSettings/ProjectVersion.txt` file. Pure / no I/O beyond
|
|
28
|
+
* `fs.existsSync`.
|
|
29
|
+
*/
|
|
30
|
+
export function isUnityProjectDir(projectPath) {
|
|
31
|
+
const hasAssets = fs.existsSync(path.join(projectPath, 'Assets'));
|
|
32
|
+
const hasProjectVersion = fs.existsSync(path.join(projectPath, 'ProjectSettings', 'ProjectVersion.txt'));
|
|
33
|
+
return hasAssets && hasProjectVersion;
|
|
34
|
+
}
|
|
35
|
+
function isValidAuth(v) {
|
|
36
|
+
return v === 'none' || v === 'required';
|
|
37
|
+
}
|
|
38
|
+
function isValidTransport(v) {
|
|
39
|
+
return v === 'streamableHttp' || v === 'stdio';
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Extract the leading executable path from a Unity process command
|
|
43
|
+
* line. Quote-aware: a leading double-quoted token (the typical
|
|
44
|
+
* Windows CIM `CommandLine` shape for paths containing spaces) is
|
|
45
|
+
* consumed whole, otherwise the first whitespace-delimited token is
|
|
46
|
+
* used. Pure / no I/O.
|
|
47
|
+
*/
|
|
48
|
+
function extractEditorPathFromCommandLine(commandLine) {
|
|
49
|
+
const trimmed = commandLine.trim();
|
|
50
|
+
if (trimmed.length === 0)
|
|
51
|
+
return '';
|
|
52
|
+
const quoted = trimmed.match(/^"([^"]+)"/);
|
|
53
|
+
if (quoted)
|
|
54
|
+
return quoted[1];
|
|
55
|
+
const unquoted = trimmed.match(/^(\S+)/);
|
|
56
|
+
return unquoted ? unquoted[1] : '';
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Build the env-var map propagated to the editor process when
|
|
60
|
+
* `noConnect !== true`. Pure (returns a fresh object); validates the
|
|
61
|
+
* `auth` and `transport` enums and throws on bad input — the
|
|
62
|
+
* `openProject` boundary catches the throw and returns it as a
|
|
63
|
+
* `{ kind: 'failure' }` result so nothing escapes past the public
|
|
64
|
+
* boundary.
|
|
65
|
+
*
|
|
66
|
+
* Exported for tests so the env-var assembly can be exercised
|
|
67
|
+
* without a real editor launch.
|
|
68
|
+
*/
|
|
69
|
+
export function buildOpenEnv(options) {
|
|
70
|
+
if (options.noConnect === true)
|
|
71
|
+
return undefined;
|
|
72
|
+
const env = {};
|
|
73
|
+
if (options.url !== undefined)
|
|
74
|
+
env['UNITY_MCP_HOST'] = options.url;
|
|
75
|
+
if (options.keepConnected)
|
|
76
|
+
env['UNITY_MCP_KEEP_CONNECTED'] = 'true';
|
|
77
|
+
if (options.tools !== undefined)
|
|
78
|
+
env['UNITY_MCP_TOOLS'] = options.tools;
|
|
79
|
+
if (options.token !== undefined)
|
|
80
|
+
env['UNITY_MCP_TOKEN'] = options.token;
|
|
81
|
+
if (options.auth !== undefined) {
|
|
82
|
+
if (!isValidAuth(options.auth)) {
|
|
83
|
+
throw new Error('auth must be "none" or "required"');
|
|
84
|
+
}
|
|
85
|
+
env['UNITY_MCP_AUTH_OPTION'] = options.auth;
|
|
86
|
+
}
|
|
87
|
+
if (options.transport !== undefined) {
|
|
88
|
+
if (!isValidTransport(options.transport)) {
|
|
89
|
+
throw new Error('transport must be "streamableHttp" or "stdio"');
|
|
90
|
+
}
|
|
91
|
+
env['UNITY_MCP_TRANSPORT'] = options.transport;
|
|
92
|
+
}
|
|
93
|
+
if (options.startServer !== undefined) {
|
|
94
|
+
env['UNITY_MCP_START_SERVER'] = options.startServer ? 'true' : 'false';
|
|
95
|
+
}
|
|
96
|
+
return Object.keys(env).length > 0 ? env : undefined;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Open a Unity project in the Unity Editor — the library-callable
|
|
100
|
+
* equivalent of the `open` CLI command. Library-safe: never calls
|
|
101
|
+
* `process.exit`, never prints to stdout / stderr, never throws past
|
|
102
|
+
* the public boundary.
|
|
103
|
+
*
|
|
104
|
+
* The launch logic (Unity-version detection, editor location,
|
|
105
|
+
* project-path validation, environment-variable wiring, editor
|
|
106
|
+
* spawn) is shared with the CLI command — `commands/open.ts`
|
|
107
|
+
* delegates to this function so the two paths cannot drift.
|
|
108
|
+
*
|
|
109
|
+
* Returns a discriminated union — narrow with
|
|
110
|
+
* `result.kind === 'success'` to access `editorPath` / `editorPid`
|
|
111
|
+
* / `unityVersion` / `projectPath`, or `result.kind === 'failure'`
|
|
112
|
+
* to access `errorMessage` / `error`.
|
|
113
|
+
*/
|
|
114
|
+
export async function openProject(options) {
|
|
115
|
+
const warnings = [];
|
|
116
|
+
let resolvedProjectPath;
|
|
117
|
+
let resolvedEditorPath;
|
|
118
|
+
let resolvedVersion;
|
|
119
|
+
try {
|
|
120
|
+
const { projectPath } = resolveProjectPath(options.projectPath, process.cwd());
|
|
121
|
+
resolvedProjectPath = projectPath;
|
|
122
|
+
if (!fs.existsSync(projectPath)) {
|
|
123
|
+
throw new Error(`Project path does not exist: ${projectPath}`);
|
|
124
|
+
}
|
|
125
|
+
if (!isUnityProjectDir(projectPath)) {
|
|
126
|
+
throw new Error(`Not a Unity project (missing Assets/ or ProjectSettings/ProjectVersion.txt): ${projectPath}`);
|
|
127
|
+
}
|
|
128
|
+
emitProgress(options.onProgress, {
|
|
129
|
+
phase: 'start',
|
|
130
|
+
message: `Opening Unity project at ${projectPath}`,
|
|
131
|
+
});
|
|
132
|
+
// Validate auth/transport BEFORE work begins so callers learn of
|
|
133
|
+
// a typo without first paying for editor-discovery I/O. The
|
|
134
|
+
// returned env is recomputed below if cloud-mode auto-detect
|
|
135
|
+
// flips keepConnected; otherwise we reuse this same map.
|
|
136
|
+
let env = buildOpenEnv(options);
|
|
137
|
+
// Already-running short-circuit. Same semantics as the CLI:
|
|
138
|
+
// success, with the existing PID surfaced.
|
|
139
|
+
const existingProcess = findUnityProcess(projectPath);
|
|
140
|
+
if (existingProcess) {
|
|
141
|
+
warnings.push(`Unity is already running with this project (PID: ${existingProcess.pid}). Skipping launch.`);
|
|
142
|
+
emitProgress(options.onProgress, {
|
|
143
|
+
phase: 'done',
|
|
144
|
+
message: 'Unity is already running for this project — launch skipped.',
|
|
145
|
+
});
|
|
146
|
+
return {
|
|
147
|
+
kind: 'success',
|
|
148
|
+
success: true,
|
|
149
|
+
editorPath: extractEditorPathFromCommandLine(existingProcess.commandLine),
|
|
150
|
+
editorPid: existingProcess.pid,
|
|
151
|
+
unityVersion: getProjectEditorVersion(projectPath) ?? undefined,
|
|
152
|
+
projectPath,
|
|
153
|
+
warnings,
|
|
154
|
+
alreadyRunning: true,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
// Resolve editor version: explicit option wins, otherwise read
|
|
158
|
+
// from ProjectVersion.txt.
|
|
159
|
+
emitProgress(options.onProgress, {
|
|
160
|
+
phase: 'detecting-editor-version',
|
|
161
|
+
message: 'Detecting Unity Editor version',
|
|
162
|
+
});
|
|
163
|
+
let version = options.unityVersion;
|
|
164
|
+
if (!version) {
|
|
165
|
+
version = getProjectEditorVersion(projectPath) ?? undefined;
|
|
166
|
+
}
|
|
167
|
+
resolvedVersion = version;
|
|
168
|
+
// Locate editor binary (Unity Hub / common locations).
|
|
169
|
+
const editorPath = await findEditorPath(version);
|
|
170
|
+
// Boolean signal for caller telemetry — we surface only whether
|
|
171
|
+
// editor discovery succeeded, not how many editors are installed.
|
|
172
|
+
emitProgress(options.onProgress, {
|
|
173
|
+
phase: 'editors-located',
|
|
174
|
+
message: editorPath
|
|
175
|
+
? 'Located Unity Editor candidates'
|
|
176
|
+
: 'Failed to locate any Unity Editor',
|
|
177
|
+
found: editorPath !== null,
|
|
178
|
+
});
|
|
179
|
+
if (!editorPath) {
|
|
180
|
+
const detail = version
|
|
181
|
+
? `Unity Editor ${version} is not installed.`
|
|
182
|
+
: 'No Unity Editor found.';
|
|
183
|
+
throw new Error(detail);
|
|
184
|
+
}
|
|
185
|
+
resolvedEditorPath = editorPath;
|
|
186
|
+
emitProgress(options.onProgress, {
|
|
187
|
+
phase: 'editor-resolved',
|
|
188
|
+
message: `Resolved Unity Editor at ${editorPath}`,
|
|
189
|
+
editorPath,
|
|
190
|
+
version,
|
|
191
|
+
});
|
|
192
|
+
// Cloud-mode auto-detect: if the project's config is in Cloud
|
|
193
|
+
// mode AND has a cloudToken, ensure keepConnected so the plugin
|
|
194
|
+
// connects on startup; also enable claude-code skill auto-gen.
|
|
195
|
+
let effectiveOptions = options;
|
|
196
|
+
{
|
|
197
|
+
const config = readConfig(projectPath);
|
|
198
|
+
if (config && isCloudMode(config) && config.cloudToken) {
|
|
199
|
+
if (!effectiveOptions.keepConnected) {
|
|
200
|
+
effectiveOptions = { ...effectiveOptions, keepConnected: true };
|
|
201
|
+
warnings.push('Cloud mode with token detected — auto-enabling keep-connected.');
|
|
202
|
+
// keepConnected flipped — rebuild the env map so the editor
|
|
203
|
+
// receives UNITY_MCP_KEEP_CONNECTED=true.
|
|
204
|
+
env = buildOpenEnv(effectiveOptions);
|
|
205
|
+
}
|
|
206
|
+
const skillAutoGenerate = { ...(config.skillAutoGenerate ?? {}) };
|
|
207
|
+
if (!skillAutoGenerate['claude-code']) {
|
|
208
|
+
skillAutoGenerate['claude-code'] = true;
|
|
209
|
+
writeConfig(projectPath, { ...config, skillAutoGenerate });
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
emitProgress(options.onProgress, {
|
|
214
|
+
phase: 'connection-details',
|
|
215
|
+
message: env
|
|
216
|
+
? 'MCP connection environment variables prepared'
|
|
217
|
+
: 'No MCP connection environment variables (--no-connect or no options provided)',
|
|
218
|
+
projectPath,
|
|
219
|
+
editorPath,
|
|
220
|
+
envVars: env ?? {},
|
|
221
|
+
});
|
|
222
|
+
emitProgress(options.onProgress, {
|
|
223
|
+
phase: 'launching-editor',
|
|
224
|
+
message: `Launching Unity Editor`,
|
|
225
|
+
editorPath,
|
|
226
|
+
projectPath,
|
|
227
|
+
});
|
|
228
|
+
// Spawn the editor via the shared util. We capture the spawn /
|
|
229
|
+
// error events with callbacks and bridge them to the
|
|
230
|
+
// onProgress channel.
|
|
231
|
+
const child = launchEditor(editorPath, projectPath, env, {
|
|
232
|
+
onSpawn: (pid) => {
|
|
233
|
+
emitProgress(options.onProgress, {
|
|
234
|
+
phase: 'editor-launched',
|
|
235
|
+
message: `Launched Unity Editor (PID: ${pid ?? 'unknown'})`,
|
|
236
|
+
pid,
|
|
237
|
+
});
|
|
238
|
+
},
|
|
239
|
+
onError: (err) => {
|
|
240
|
+
// Don't throw out of the event listener — the caller can't
|
|
241
|
+
// catch it. Surface the warning for diagnostics.
|
|
242
|
+
warnings.push(`Editor spawn reported error: ${err.message}`);
|
|
243
|
+
},
|
|
244
|
+
});
|
|
245
|
+
// The `spawn` event fires asynchronously after `spawn(...)` returns.
|
|
246
|
+
// We wait briefly so the PID gets surfaced in the result. The
|
|
247
|
+
// child is already detached + unref'd, so this does NOT block
|
|
248
|
+
// process exit.
|
|
249
|
+
const pid = await waitForSpawn(child);
|
|
250
|
+
emitProgress(options.onProgress, {
|
|
251
|
+
phase: 'done',
|
|
252
|
+
message: 'Editor launched.',
|
|
253
|
+
});
|
|
254
|
+
return {
|
|
255
|
+
kind: 'success',
|
|
256
|
+
success: true,
|
|
257
|
+
editorPath,
|
|
258
|
+
editorPid: pid,
|
|
259
|
+
unityVersion: version,
|
|
260
|
+
projectPath,
|
|
261
|
+
warnings,
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
catch (err) {
|
|
265
|
+
const errorObj = err instanceof Error ? err : new Error(String(err));
|
|
266
|
+
return {
|
|
267
|
+
kind: 'failure',
|
|
268
|
+
success: false,
|
|
269
|
+
projectPath: resolvedProjectPath,
|
|
270
|
+
editorPath: resolvedEditorPath,
|
|
271
|
+
unityVersion: resolvedVersion,
|
|
272
|
+
warnings,
|
|
273
|
+
errorMessage: errorObj.message,
|
|
274
|
+
error: errorObj,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Resolve to the spawned PID once the child process emits its
|
|
280
|
+
* `spawn` event, or to `undefined` if a short timeout elapses or
|
|
281
|
+
* the process emits `error` first. Library-safe: never throws,
|
|
282
|
+
* never blocks process exit (the caller has already detached).
|
|
283
|
+
*/
|
|
284
|
+
function waitForSpawn(child, timeoutMs = 2000) {
|
|
285
|
+
return new Promise((resolve) => {
|
|
286
|
+
if (child.pid !== undefined && child.pid !== null) {
|
|
287
|
+
// Some Node versions populate `pid` synchronously on spawn().
|
|
288
|
+
resolve(child.pid);
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
let settled = false;
|
|
292
|
+
const finish = (pid) => {
|
|
293
|
+
if (settled)
|
|
294
|
+
return;
|
|
295
|
+
settled = true;
|
|
296
|
+
resolve(pid);
|
|
297
|
+
};
|
|
298
|
+
child.once('spawn', () => finish(child.pid ?? undefined));
|
|
299
|
+
child.once('error', () => finish(undefined));
|
|
300
|
+
setTimeout(() => finish(child.pid ?? undefined), timeoutMs).unref();
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
//# sourceMappingURL=open.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open.js","sourceRoot":"","sources":["../../src/lib/open.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,YAAY,GACb,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAS7C;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAChC,UAA8B,EAC9B,GAAW;IAEX,MAAM,QAAQ,GAAG,UAAU,CAAC;IAC5B,MAAM,YAAY,GAAG,QAAQ,IAAI,GAAG,CAAC;IACrC,OAAO;QACL,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;QACvC,eAAe,EAAE,QAAQ,KAAK,SAAS;KACxC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,MAAM,SAAS,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;IAClE,MAAM,iBAAiB,GAAG,EAAE,CAAC,UAAU,CACrC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,iBAAiB,EAAE,oBAAoB,CAAC,CAChE,CAAC;IACF,OAAO,SAAS,IAAI,iBAAiB,CAAC;AACxC,CAAC;AAED,SAAS,WAAW,CAAC,CAAU;IAC7B,OAAO,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,UAAU,CAAC;AAC1C,CAAC;AAED,SAAS,gBAAgB,CAAC,CAAU;IAClC,OAAO,CAAC,KAAK,gBAAgB,IAAI,CAAC,KAAK,OAAO,CAAC;AACjD,CAAC;AAED;;;;;;GAMG;AACH,SAAS,gCAAgC,CAAC,WAAmB;IAC3D,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC3C,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACzC,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACrC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAC1B,OAAsB;IAEtB,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAEjD,MAAM,GAAG,GAA2B,EAAE,CAAC;IAEvC,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS;QAAE,GAAG,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IACnE,IAAI,OAAO,CAAC,aAAa;QAAE,GAAG,CAAC,0BAA0B,CAAC,GAAG,MAAM,CAAC;IACpE,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;QAAE,GAAG,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;IACxE,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;QAAE,GAAG,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;IAExE,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QACD,GAAG,CAAC,uBAAuB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAC9C,CAAC;IAED,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACpC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QACD,GAAG,CAAC,qBAAqB,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IACjD,CAAC;IAED,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACtC,GAAG,CAAC,wBAAwB,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IACzE,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAA2B;IAE3B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,mBAAuC,CAAC;IAC5C,IAAI,kBAAsC,CAAC;IAC3C,IAAI,eAAmC,CAAC;IAExC,IAAI,CAAC;QACH,MAAM,EAAE,WAAW,EAAE,GAAG,kBAAkB,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/E,mBAAmB,GAAG,WAAW,CAAC;QAElC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,gCAAgC,WAAW,EAAE,CAAC,CAAC;QACjE,CAAC;QAED,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CACb,gFAAgF,WAAW,EAAE,CAC9F,CAAC;QACJ,CAAC;QAED,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE;YAC/B,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,4BAA4B,WAAW,EAAE;SACnD,CAAC,CAAC;QAEH,iEAAiE;QACjE,4DAA4D;QAC5D,6DAA6D;QAC7D,yDAAyD;QACzD,IAAI,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QAEhC,4DAA4D;QAC5D,2CAA2C;QAC3C,MAAM,eAAe,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;QACtD,IAAI,eAAe,EAAE,CAAC;YACpB,QAAQ,CAAC,IAAI,CACX,oDAAoD,eAAe,CAAC,GAAG,qBAAqB,CAC7F,CAAC;YACF,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE;gBAC/B,KAAK,EAAE,MAAM;gBACb,OAAO,EAAE,6DAA6D;aACvE,CAAC,CAAC;YACH,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,IAAI;gBACb,UAAU,EAAE,gCAAgC,CAAC,eAAe,CAAC,WAAW,CAAC;gBACzE,SAAS,EAAE,eAAe,CAAC,GAAG;gBAC9B,YAAY,EAAE,uBAAuB,CAAC,WAAW,CAAC,IAAI,SAAS;gBAC/D,WAAW;gBACX,QAAQ;gBACR,cAAc,EAAE,IAAI;aACrB,CAAC;QACJ,CAAC;QAED,+DAA+D;QAC/D,2BAA2B;QAC3B,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE;YAC/B,KAAK,EAAE,0BAA0B;YACjC,OAAO,EAAE,gCAAgC;SAC1C,CAAC,CAAC;QACH,IAAI,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC;QACnC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,uBAAuB,CAAC,WAAW,CAAC,IAAI,SAAS,CAAC;QAC9D,CAAC;QACD,eAAe,GAAG,OAAO,CAAC;QAE1B,uDAAuD;QACvD,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;QAEjD,gEAAgE;QAChE,kEAAkE;QAClE,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE;YAC/B,KAAK,EAAE,iBAAiB;YACxB,OAAO,EAAE,UAAU;gBACjB,CAAC,CAAC,iCAAiC;gBACnC,CAAC,CAAC,mCAAmC;YACvC,KAAK,EAAE,UAAU,KAAK,IAAI;SAC3B,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,MAAM,GAAG,OAAO;gBACpB,CAAC,CAAC,gBAAgB,OAAO,oBAAoB;gBAC7C,CAAC,CAAC,wBAAwB,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC;QACD,kBAAkB,GAAG,UAAU,CAAC;QAEhC,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE;YAC/B,KAAK,EAAE,iBAAiB;YACxB,OAAO,EAAE,4BAA4B,UAAU,EAAE;YACjD,UAAU;YACV,OAAO;SACR,CAAC,CAAC;QAEH,8DAA8D;QAC9D,gEAAgE;QAChE,+DAA+D;QAC/D,IAAI,gBAAgB,GAAG,OAAO,CAAC;QAC/B,CAAC;YACC,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;YACvC,IAAI,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBACvD,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC;oBACpC,gBAAgB,GAAG,EAAE,GAAG,gBAAgB,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;oBAChE,QAAQ,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;oBAChF,4DAA4D;oBAC5D,0CAA0C;oBAC1C,GAAG,GAAG,YAAY,CAAC,gBAAgB,CAAC,CAAC;gBACvC,CAAC;gBACD,MAAM,iBAAiB,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,iBAAiB,IAAI,EAAE,CAAC,EAA6B,CAAC;gBAC7F,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAAE,CAAC;oBACtC,iBAAiB,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;oBACxC,WAAW,CAAC,WAAW,EAAE,EAAE,GAAG,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;gBAC7D,CAAC;YACH,CAAC;QACH,CAAC;QAED,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE;YAC/B,KAAK,EAAE,oBAAoB;YAC3B,OAAO,EAAE,GAAG;gBACV,CAAC,CAAC,+CAA+C;gBACjD,CAAC,CAAC,+EAA+E;YACnF,WAAW;YACX,UAAU;YACV,OAAO,EAAE,GAAG,IAAI,EAAE;SACnB,CAAC,CAAC;QAEH,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE;YAC/B,KAAK,EAAE,kBAAkB;YACzB,OAAO,EAAE,wBAAwB;YACjC,UAAU;YACV,WAAW;SACZ,CAAC,CAAC;QAEH,+DAA+D;QAC/D,qDAAqD;QACrD,sBAAsB;QACtB,MAAM,KAAK,GAAG,YAAY,CAAC,UAAU,EAAE,WAAW,EAAE,GAAG,EAAE;YACvD,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACf,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE;oBAC/B,KAAK,EAAE,iBAAiB;oBACxB,OAAO,EAAE,+BAA+B,GAAG,IAAI,SAAS,GAAG;oBAC3D,GAAG;iBACJ,CAAC,CAAC;YACL,CAAC;YACD,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACf,2DAA2D;gBAC3D,iDAAiD;gBACjD,QAAQ,CAAC,IAAI,CAAC,gCAAgC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC/D,CAAC;SACF,CAAC,CAAC;QAEH,qEAAqE;QACrE,8DAA8D;QAC9D,8DAA8D;QAC9D,gBAAgB;QAChB,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,CAAC;QAEtC,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE;YAC/B,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,kBAAkB;SAC5B,CAAC,CAAC;QAEH,OAAO;YACL,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,IAAI;YACb,UAAU;YACV,SAAS,EAAE,GAAG;YACd,YAAY,EAAE,OAAO;YACrB,WAAW;YACX,QAAQ;SACT,CAAC;IACJ,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACrE,OAAO;YACL,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;YACd,WAAW,EAAE,mBAAmB;YAChC,UAAU,EAAE,kBAAkB;YAC9B,YAAY,EAAE,eAAe;YAC7B,QAAQ;YACR,YAAY,EAAE,QAAQ,CAAC,OAAO;YAC9B,KAAK,EAAE,QAAQ;SAChB,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY,CACnB,KAA2C,EAC3C,SAAS,GAAG,IAAI;IAEhB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;YAClD,8DAA8D;YAC9D,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnB,OAAO;QACT,CAAC;QACD,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,MAAM,GAAG,CAAC,GAAuB,EAAQ,EAAE;YAC/C,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,CAAC;QACf,CAAC,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC;QAC1D,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAC7C,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC;IACtE,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/lib/types.d.ts
CHANGED
|
@@ -15,6 +15,33 @@ export type ProgressEvent = {
|
|
|
15
15
|
phase: 'dependencies-resolved';
|
|
16
16
|
message: string;
|
|
17
17
|
version: string;
|
|
18
|
+
} | {
|
|
19
|
+
phase: 'detecting-editor-version';
|
|
20
|
+
message: string;
|
|
21
|
+
} | {
|
|
22
|
+
phase: 'editors-located';
|
|
23
|
+
message: string;
|
|
24
|
+
found: boolean;
|
|
25
|
+
} | {
|
|
26
|
+
phase: 'editor-resolved';
|
|
27
|
+
message: string;
|
|
28
|
+
editorPath: string;
|
|
29
|
+
version?: string;
|
|
30
|
+
} | {
|
|
31
|
+
phase: 'connection-details';
|
|
32
|
+
message: string;
|
|
33
|
+
projectPath: string;
|
|
34
|
+
editorPath: string;
|
|
35
|
+
envVars: Record<string, string>;
|
|
36
|
+
} | {
|
|
37
|
+
phase: 'launching-editor';
|
|
38
|
+
message: string;
|
|
39
|
+
editorPath: string;
|
|
40
|
+
projectPath: string;
|
|
41
|
+
} | {
|
|
42
|
+
phase: 'editor-launched';
|
|
43
|
+
message: string;
|
|
44
|
+
pid?: number;
|
|
18
45
|
} | {
|
|
19
46
|
phase: 'done';
|
|
20
47
|
message: string;
|
|
@@ -185,3 +212,115 @@ export interface SetupMcpFailure {
|
|
|
185
212
|
error: Error;
|
|
186
213
|
}
|
|
187
214
|
export type SetupMcpResult = SetupMcpSuccess | SetupMcpFailure;
|
|
215
|
+
/** Auth option propagated to the Editor as `UNITY_MCP_AUTH_OPTION`. */
|
|
216
|
+
export type OpenProjectAuthOption = 'none' | 'required';
|
|
217
|
+
/** Transport propagated to the Editor as `UNITY_MCP_TRANSPORT`. */
|
|
218
|
+
export type OpenProjectTransport = 'streamableHttp' | 'stdio';
|
|
219
|
+
export interface OpenProjectOptions {
|
|
220
|
+
/**
|
|
221
|
+
* Path to the Unity project to open. Absolute or relative; defaults
|
|
222
|
+
* to `process.cwd()` if omitted.
|
|
223
|
+
*/
|
|
224
|
+
projectPath?: string;
|
|
225
|
+
/** Specific Unity Editor version to use (e.g. `"2022.3.62f3"`). */
|
|
226
|
+
unityVersion?: string;
|
|
227
|
+
/**
|
|
228
|
+
* If `true`, skip wiring the MCP connection environment variables
|
|
229
|
+
* onto the spawned editor process. Mirrors the CLI's `--no-connect`
|
|
230
|
+
* flag semantics. Defaults to `false`.
|
|
231
|
+
*/
|
|
232
|
+
noConnect?: boolean;
|
|
233
|
+
/** MCP server URL — sets `UNITY_MCP_HOST` on the editor process. */
|
|
234
|
+
url?: string;
|
|
235
|
+
/** Auth token — sets `UNITY_MCP_TOKEN` on the editor process. */
|
|
236
|
+
token?: string;
|
|
237
|
+
/** Auth option — sets `UNITY_MCP_AUTH_OPTION` on the editor process. */
|
|
238
|
+
auth?: OpenProjectAuthOption;
|
|
239
|
+
/** Comma-separated list of tool names — sets `UNITY_MCP_TOOLS`. */
|
|
240
|
+
tools?: string;
|
|
241
|
+
/**
|
|
242
|
+
* If `true`, sets `UNITY_MCP_KEEP_CONNECTED=true`. Auto-enabled by
|
|
243
|
+
* Cloud-mode auto-detection when a `cloudToken` is present in the
|
|
244
|
+
* project's config.
|
|
245
|
+
*/
|
|
246
|
+
keepConnected?: boolean;
|
|
247
|
+
/** Transport — sets `UNITY_MCP_TRANSPORT`. */
|
|
248
|
+
transport?: OpenProjectTransport;
|
|
249
|
+
/**
|
|
250
|
+
* If set, sets `UNITY_MCP_START_SERVER=true|false`. Use a boolean to
|
|
251
|
+
* avoid the CLI's stringly-typed `"true"`/`"false"` parse step.
|
|
252
|
+
*/
|
|
253
|
+
startServer?: boolean;
|
|
254
|
+
/**
|
|
255
|
+
* Optional progress callback — fires for `start`,
|
|
256
|
+
* `detecting-editor-version`, `editors-located`, `editor-resolved`,
|
|
257
|
+
* `connection-details`, `launching-editor`, `editor-launched`, and
|
|
258
|
+
* `done`.
|
|
259
|
+
*/
|
|
260
|
+
onProgress?: ProgressCallback;
|
|
261
|
+
}
|
|
262
|
+
/** Successful `openProject` outcome. Narrow with `kind === 'success'`. */
|
|
263
|
+
export interface OpenProjectSuccess {
|
|
264
|
+
kind: 'success';
|
|
265
|
+
/** Always `true` for the success variant. */
|
|
266
|
+
success: true;
|
|
267
|
+
/** Absolute path to the Unity Editor binary that was launched. */
|
|
268
|
+
editorPath: string;
|
|
269
|
+
/**
|
|
270
|
+
* PID of the spawned editor process. May be `undefined` if the OS
|
|
271
|
+
* has not yet reported a PID by the time the call returns (rare;
|
|
272
|
+
* the value is captured asynchronously from the child process's
|
|
273
|
+
* `spawn` event).
|
|
274
|
+
*/
|
|
275
|
+
editorPid?: number;
|
|
276
|
+
/** Editor version string used (e.g. `"2022.3.62f3"`), if known. */
|
|
277
|
+
unityVersion?: string;
|
|
278
|
+
/** Resolved absolute project path. */
|
|
279
|
+
projectPath: string;
|
|
280
|
+
/** Non-fatal warnings collected during the run. */
|
|
281
|
+
warnings: string[];
|
|
282
|
+
/**
|
|
283
|
+
* `true` when an existing Unity Editor process was already running
|
|
284
|
+
* with this project and a launch was therefore skipped. The
|
|
285
|
+
* `editorPid` will be the existing process's PID in that case.
|
|
286
|
+
*/
|
|
287
|
+
alreadyRunning?: boolean;
|
|
288
|
+
}
|
|
289
|
+
/** Failed `openProject` outcome. Narrow with `kind === 'failure'`. */
|
|
290
|
+
export interface OpenProjectFailure {
|
|
291
|
+
kind: 'failure';
|
|
292
|
+
/** Always `false` for the failure variant. */
|
|
293
|
+
success: false;
|
|
294
|
+
/** Resolved absolute project path, if it could be determined. */
|
|
295
|
+
projectPath?: string;
|
|
296
|
+
/** Editor path, if locating the editor succeeded. */
|
|
297
|
+
editorPath?: string;
|
|
298
|
+
/** Editor version, if it could be detected before failure. */
|
|
299
|
+
unityVersion?: string;
|
|
300
|
+
/** Non-fatal warnings collected before the failure. */
|
|
301
|
+
warnings: string[];
|
|
302
|
+
/** Human-readable error message — never thrown past the public boundary. */
|
|
303
|
+
errorMessage: string;
|
|
304
|
+
/** The captured error. */
|
|
305
|
+
error: Error;
|
|
306
|
+
}
|
|
307
|
+
export type OpenProjectResult = OpenProjectSuccess | OpenProjectFailure;
|
|
308
|
+
/**
|
|
309
|
+
* Subset of `OpenProjectOptions` consumed by `buildOpenEnv` — every
|
|
310
|
+
* field on this interface is potentially mapped to a `UNITY_MCP_*`
|
|
311
|
+
* environment variable. Declared as a dedicated interface (rather
|
|
312
|
+
* than a `Pick<OpenProjectOptions, …>` re-listed inline) so adding a
|
|
313
|
+
* new env-bearing option to `OpenProjectOptions` is a one-step change
|
|
314
|
+
* here that `buildOpenEnv` picks up by signature, with no risk of the
|
|
315
|
+
* Pick list silently drifting.
|
|
316
|
+
*/
|
|
317
|
+
export interface OpenEnvInputs {
|
|
318
|
+
noConnect?: OpenProjectOptions['noConnect'];
|
|
319
|
+
url?: OpenProjectOptions['url'];
|
|
320
|
+
token?: OpenProjectOptions['token'];
|
|
321
|
+
auth?: OpenProjectOptions['auth'];
|
|
322
|
+
tools?: OpenProjectOptions['tools'];
|
|
323
|
+
keepConnected?: OpenProjectOptions['keepConnected'];
|
|
324
|
+
transport?: OpenProjectOptions['transport'];
|
|
325
|
+
startServer?: OpenProjectOptions['startServer'];
|
|
326
|
+
}
|
package/dist/lib.d.ts
CHANGED
|
@@ -2,4 +2,5 @@ export { installPlugin } from './lib/install-plugin.js';
|
|
|
2
2
|
export { removePlugin } from './lib/remove-plugin.js';
|
|
3
3
|
export { configure } from './lib/configure.js';
|
|
4
4
|
export { setupMcp, listAgentIds } from './lib/setup-mcp.js';
|
|
5
|
-
export
|
|
5
|
+
export { openProject } from './lib/open.js';
|
|
6
|
+
export type { ProgressEvent, ProgressCallback, ResultKind, InstallPluginOptions, InstallResult, InstallSuccess, InstallFailure, RemovePluginOptions, RemoveResult, RemoveSuccess, RemoveFailure, ConfigureOptions, ConfigureResult, ConfigureSuccess, ConfigureFailure, ConfigureSnapshot, FeatureAction, McpFeatureSnapshot, SetupMcpOptions, SetupMcpResult, SetupMcpSuccess, SetupMcpFailure, McpTransport, OpenProjectOptions, OpenProjectResult, OpenProjectSuccess, OpenProjectFailure, OpenProjectAuthOption, OpenProjectTransport, } from './lib/types.js';
|
package/dist/lib.js
CHANGED
|
@@ -19,4 +19,5 @@ export { installPlugin } from './lib/install-plugin.js';
|
|
|
19
19
|
export { removePlugin } from './lib/remove-plugin.js';
|
|
20
20
|
export { configure } from './lib/configure.js';
|
|
21
21
|
export { setupMcp, listAgentIds } from './lib/setup-mcp.js';
|
|
22
|
+
export { openProject } from './lib/open.js';
|
|
22
23
|
//# sourceMappingURL=lib.js.map
|
package/dist/lib.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,EAAE;AACF,qDAAqD;AACrD,iEAAiE;AACjE,sEAAsE;AACtE,oDAAoD;AACpD,yEAAyE;AACzE,0EAA0E;AAC1E,0EAA0E;AAC1E,uEAAuE;AACvE,uEAAuE;AACvE,iEAAiE;AACjE,oEAAoE;AACpE,2BAA2B;AAC3B,EAAE;AACF,sEAAsE;AACtE,sDAAsD;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,EAAE;AACF,qDAAqD;AACrD,iEAAiE;AACjE,sEAAsE;AACtE,oDAAoD;AACpD,yEAAyE;AACzE,0EAA0E;AAC1E,0EAA0E;AAC1E,uEAAuE;AACvE,uEAAuE;AACvE,iEAAiE;AACjE,oEAAoE;AACpE,2BAA2B;AAC3B,EAAE;AACF,sEAAsE;AACtE,sDAAsD;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -16,11 +16,25 @@ export declare function findEditorPath(version?: string): Promise<string | null>
|
|
|
16
16
|
* On macOS, also handles paths that already end with `.app`.
|
|
17
17
|
*/
|
|
18
18
|
export declare function resolveEditorPath(editorDir: string, os: string): string;
|
|
19
|
+
export interface LaunchEditorCallbacks {
|
|
20
|
+
/** Fired once the OS reports the child process has spawned. */
|
|
21
|
+
onSpawn?: (pid: number | undefined) => void;
|
|
22
|
+
/** Fired if the spawn itself fails (binary missing, permission denied, …). */
|
|
23
|
+
onError?: (err: Error) => void;
|
|
24
|
+
}
|
|
19
25
|
/**
|
|
20
|
-
*
|
|
21
|
-
*
|
|
26
|
+
* Spawn the Unity Editor binary with the given project path. Returns
|
|
27
|
+
* the spawned `ChildProcess` so callers can await its `spawn` /
|
|
28
|
+
* `error` events themselves; library callers pass `onSpawn`/`onError`
|
|
29
|
+
* to avoid plumbing event listeners through their own code.
|
|
30
|
+
*
|
|
31
|
+
* Library-safe (does NOT call `process.exit`, does NOT print to
|
|
32
|
+
* stdout/stderr — observability is the caller's responsibility via
|
|
33
|
+
* the optional callbacks). The CLI's `commands/open.ts` wires those
|
|
34
|
+
* callbacks back into `ui.success` / `ui.error` so the terminal
|
|
35
|
+
* experience stays identical.
|
|
22
36
|
*/
|
|
23
|
-
export declare function launchEditor(editorPath: string, projectPath: string, env?: Record<string, string
|
|
37
|
+
export declare function launchEditor(editorPath: string, projectPath: string, env?: Record<string, string>, callbacks?: LaunchEditorCallbacks): import('child_process').ChildProcess;
|
|
24
38
|
/**
|
|
25
39
|
* Print actionable help when a required Unity Editor version is not found.
|
|
26
40
|
* Lists installed editors and suggests install or override commands.
|
|
@@ -200,10 +200,18 @@ function getEditorBinary(editorDir) {
|
|
|
200
200
|
return resolveEditorPath(editorDir, platform());
|
|
201
201
|
}
|
|
202
202
|
/**
|
|
203
|
-
*
|
|
204
|
-
*
|
|
203
|
+
* Spawn the Unity Editor binary with the given project path. Returns
|
|
204
|
+
* the spawned `ChildProcess` so callers can await its `spawn` /
|
|
205
|
+
* `error` events themselves; library callers pass `onSpawn`/`onError`
|
|
206
|
+
* to avoid plumbing event listeners through their own code.
|
|
207
|
+
*
|
|
208
|
+
* Library-safe (does NOT call `process.exit`, does NOT print to
|
|
209
|
+
* stdout/stderr — observability is the caller's responsibility via
|
|
210
|
+
* the optional callbacks). The CLI's `commands/open.ts` wires those
|
|
211
|
+
* callbacks back into `ui.success` / `ui.error` so the terminal
|
|
212
|
+
* experience stays identical.
|
|
205
213
|
*/
|
|
206
|
-
export function launchEditor(editorPath, projectPath, env) {
|
|
214
|
+
export function launchEditor(editorPath, projectPath, env, callbacks) {
|
|
207
215
|
const args = ['-projectPath', path.resolve(projectPath)];
|
|
208
216
|
const child = spawn(editorPath, args, {
|
|
209
217
|
detached: true,
|
|
@@ -211,12 +219,13 @@ export function launchEditor(editorPath, projectPath, env) {
|
|
|
211
219
|
env: { ...process.env, ...env },
|
|
212
220
|
});
|
|
213
221
|
child.on('spawn', () => {
|
|
214
|
-
|
|
222
|
+
callbacks?.onSpawn?.(child.pid);
|
|
215
223
|
});
|
|
216
224
|
child.on('error', (err) => {
|
|
217
|
-
|
|
225
|
+
callbacks?.onError?.(err);
|
|
218
226
|
});
|
|
219
227
|
child.unref();
|
|
228
|
+
return child;
|
|
220
229
|
}
|
|
221
230
|
/**
|
|
222
231
|
* Print actionable help when a required Unity Editor version is not found.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unity-editor.js","sourceRoot":"","sources":["../../src/utils/unity-editor.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"unity-editor.js","sourceRoot":"","sources":["../../src/utils/unity-editor.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "unity-mcp-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.70.0",
|
|
4
4
|
"description": "Cross-platform CLI tool for AI Game Developer (Skills & MCP). Full AI develop and test loop. Efficient token usage, advanced tools. Creates Unity project, installs plugins, configures tools, and manages HTTP connection with Unity Editor and a game made with Unity. Works with Claude Code, Gemini, Copilot, Cursor and any other absolutely for free.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/lib.js",
|