unity-open-mcp 1.2.3 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +33 -2
- package/dist/agent-identity.d.ts +12 -0
- package/dist/agent-identity.js +2 -0
- package/dist/agent-identity.js.map +1 -1
- package/dist/batch-spawn.d.ts +39 -0
- package/dist/batch-spawn.js +287 -69
- package/dist/batch-spawn.js.map +1 -1
- package/dist/capabilities/build-capabilities.js +2 -0
- package/dist/capabilities/build-capabilities.js.map +1 -1
- package/dist/capabilities/discovery.d.ts +51 -0
- package/dist/capabilities/discovery.js +87 -0
- package/dist/capabilities/discovery.js.map +1 -0
- package/dist/capabilities/lifecycle.d.ts +6 -0
- package/dist/capabilities/lifecycle.js +17 -1
- package/dist/capabilities/lifecycle.js.map +1 -1
- package/dist/capabilities/tool-groups.js +1 -0
- package/dist/capabilities/tool-groups.js.map +1 -1
- package/dist/child-supervision.d.ts +6 -0
- package/dist/child-supervision.js +12 -0
- package/dist/child-supervision.js.map +1 -1
- package/dist/cli/args.d.ts +24 -2
- package/dist/cli/args.js +97 -2
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/cli.js +42 -3
- package/dist/cli/cli.js.map +1 -1
- package/dist/cli/help-text.d.ts +1 -0
- package/dist/cli/help-text.js +71 -3
- package/dist/cli/help-text.js.map +1 -1
- package/dist/cli/json-guards.d.ts +2 -0
- package/dist/cli/json-guards.js +5 -0
- package/dist/cli/json-guards.js.map +1 -0
- package/dist/cli/setup-command.d.ts +88 -0
- package/dist/cli/setup-command.js +444 -0
- package/dist/cli/setup-command.js.map +1 -0
- package/dist/cli/update-command.d.ts +30 -0
- package/dist/cli/update-command.js +271 -0
- package/dist/cli/update-command.js.map +1 -0
- package/dist/compile-verify.d.ts +3 -0
- package/dist/compile-verify.js +4 -0
- package/dist/compile-verify.js.map +1 -1
- package/dist/constants.d.ts +10 -2
- package/dist/constants.js +10 -2
- package/dist/constants.js.map +1 -1
- package/dist/dialog-dismiss.d.ts +108 -12
- package/dist/dialog-dismiss.js +294 -109
- package/dist/dialog-dismiss.js.map +1 -1
- package/dist/dialog-policy.d.ts +55 -9
- package/dist/dialog-policy.js +85 -15
- package/dist/dialog-policy.js.map +1 -1
- package/dist/editor-search.d.ts +2 -0
- package/dist/editor-search.js +8 -0
- package/dist/editor-search.js.map +1 -0
- package/dist/gate-error.d.ts +3 -0
- package/dist/gate-error.js.map +1 -1
- package/dist/index.js +55 -1
- package/dist/index.js.map +1 -1
- package/dist/instance-discovery.d.ts +16 -0
- package/dist/instance-discovery.js +45 -0
- package/dist/instance-discovery.js.map +1 -1
- package/dist/jobs/adapters.d.ts +15 -0
- package/dist/jobs/adapters.js +147 -0
- package/dist/jobs/adapters.js.map +1 -0
- package/dist/jobs/handler.d.ts +3 -0
- package/dist/jobs/handler.js +29 -0
- package/dist/jobs/handler.js.map +1 -0
- package/dist/jobs/job-manager.d.ts +123 -0
- package/dist/jobs/job-manager.js +290 -0
- package/dist/jobs/job-manager.js.map +1 -0
- package/dist/live-client.d.ts +50 -2
- package/dist/live-client.js +221 -26
- package/dist/live-client.js.map +1 -1
- package/dist/local-tools.d.ts +17 -0
- package/dist/local-tools.js +47 -0
- package/dist/local-tools.js.map +1 -0
- package/dist/project-path.d.ts +86 -0
- package/dist/project-path.js +159 -0
- package/dist/project-path.js.map +1 -0
- package/dist/release-lookup.d.ts +32 -0
- package/dist/release-lookup.js +147 -0
- package/dist/release-lookup.js.map +1 -0
- package/dist/routers.d.ts +17 -3
- package/dist/routers.js +28 -8
- package/dist/routers.js.map +1 -1
- package/dist/running-unity.d.ts +21 -0
- package/dist/running-unity.js +50 -0
- package/dist/running-unity.js.map +1 -1
- package/dist/schema-defaults.d.ts +4 -3
- package/dist/schema-defaults.js +20 -6
- package/dist/schema-defaults.js.map +1 -1
- package/dist/server-instructions.js +7 -1
- package/dist/server-instructions.js.map +1 -1
- package/dist/server.d.ts +10 -3
- package/dist/server.js +24 -25
- package/dist/server.js.map +1 -1
- package/dist/setup/portable-config.d.ts +60 -0
- package/dist/setup/portable-config.js +249 -0
- package/dist/setup/portable-config.js.map +1 -0
- package/dist/skill/SKILL.md +68 -0
- package/dist/skill/copy-references.d.ts +2 -0
- package/dist/skill/copy-references.js +16 -0
- package/dist/skill/copy-references.js.map +1 -0
- package/dist/skill/generate-skill.js +5 -3
- package/dist/skill/generate-skill.js.map +1 -1
- package/dist/skill/references/batch-and-gates.md +142 -0
- package/dist/skill/references/compile-and-safe-mode.md +163 -0
- package/dist/skill/references/discovery-and-groups.md +30 -0
- package/dist/skill/references/routing-and-lifecycle.md +62 -0
- package/dist/skill/references/senses-and-tests.md +41 -0
- package/dist/skill/references/yaml-and-offline-work.md +33 -0
- package/dist/templates/mcp-wrapper.sh +35 -0
- package/dist/tool-contract.d.ts +8 -0
- package/dist/tool-contract.js +253 -0
- package/dist/tool-contract.js.map +1 -0
- package/dist/tool-router.d.ts +62 -7
- package/dist/tool-router.js +455 -17
- package/dist/tool-router.js.map +1 -1
- package/dist/tool-session-state.d.ts +6 -0
- package/dist/tool-session-state.js +14 -0
- package/dist/tool-session-state.js.map +1 -1
- package/dist/tools/agent-capabilities.js +9 -0
- package/dist/tools/agent-capabilities.js.map +1 -1
- package/dist/tools/batch-execute.js +17 -14
- package/dist/tools/batch-execute.js.map +1 -1
- package/dist/tools/bridge-status.js +4 -5
- package/dist/tools/bridge-status.js.map +1 -1
- package/dist/tools/compile-check.js +6 -4
- package/dist/tools/compile-check.js.map +1 -1
- package/dist/tools/component-get.js +2 -2
- package/dist/tools/component-get.js.map +1 -1
- package/dist/tools/component-modify.js +4 -4
- package/dist/tools/component-modify.js.map +1 -1
- package/dist/tools/execute-csharp.js +8 -4
- package/dist/tools/execute-csharp.js.map +1 -1
- package/dist/tools/gameobject-modify.js +2 -1
- package/dist/tools/gameobject-modify.js.map +1 -1
- package/dist/tools/index.d.ts +2 -0
- package/dist/tools/index.js +10 -2
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/inputsim-key.js +12 -14
- package/dist/tools/inputsim-key.js.map +1 -1
- package/dist/tools/inputsim-pointer.js +3 -3
- package/dist/tools/inputsim-pointer.js.map +1 -1
- package/dist/tools/inputsim-step.js +7 -8
- package/dist/tools/inputsim-step.js.map +1 -1
- package/dist/tools/inputsim-touch.js +9 -10
- package/dist/tools/inputsim-touch.js.map +1 -1
- package/dist/tools/jobs.d.ts +40 -0
- package/dist/tools/jobs.js +18 -0
- package/dist/tools/jobs.js.map +1 -0
- package/dist/tools/manage-tools.js +10 -5
- package/dist/tools/manage-tools.js.map +1 -1
- package/dist/tools/project-commands.d.ts +40 -0
- package/dist/tools/project-commands.js +23 -0
- package/dist/tools/project-commands.js.map +1 -0
- package/dist/tools/read-compile-errors.js +14 -93
- package/dist/tools/read-compile-errors.js.map +1 -1
- package/dist/tools/scan-paths.js +4 -4
- package/dist/tools/scan-paths.js.map +1 -1
- package/dist/tools/schema-fragments.d.ts +15 -3
- package/dist/tools/schema-fragments.js +23 -13
- package/dist/tools/schema-fragments.js.map +1 -1
- package/dist/tools/upgrade.d.ts +40 -0
- package/dist/tools/upgrade.js +55 -0
- package/dist/tools/upgrade.js.map +1 -0
- package/dist/unity-install-discovery.d.ts +24 -0
- package/dist/unity-install-discovery.js +113 -4
- package/dist/unity-install-discovery.js.map +1 -1
- package/package.json +4 -3
- package/templates/mcp-wrapper.sh +35 -0
|
@@ -0,0 +1,444 @@
|
|
|
1
|
+
import { copySkillReferences } from "../skill/copy-references.js";
|
|
2
|
+
import { readFile, mkdir, writeFile } from "node:fs/promises";
|
|
3
|
+
import { dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { clientSkillRelativePath, knownClientKeys, resolveTemplateSkillPath, } from "../skill/client-paths.js";
|
|
6
|
+
import { PROJECT_PATH_ENV_VAR } from "../constants.js";
|
|
7
|
+
import { validateUnityProjectRoot } from "../project-path.js";
|
|
8
|
+
import { isRecord } from "./json-guards.js";
|
|
9
|
+
import { catalogIdForSetupClient, portableEnv, portableServerArgs, portableSupportFor, renderWrapperScript, wrapperRelativePath, } from "../setup/portable-config.js";
|
|
10
|
+
const BRIDGE_PACKAGE = "com.alexeyperov.unity-open-mcp-bridge";
|
|
11
|
+
const VERIFY_PACKAGE = "com.alexeyperov.unity-open-mcp-verify";
|
|
12
|
+
const REPOSITORY_URL = "https://github.com/AlexeyPerov/unity-open-mcp.git";
|
|
13
|
+
const SERVER_KEY = "unity-open-mcp";
|
|
14
|
+
const CONFIG_CLIENTS = ["cursor", "claude", "opencode", "agents"];
|
|
15
|
+
class SetupError extends Error {
|
|
16
|
+
code;
|
|
17
|
+
exitCode;
|
|
18
|
+
constructor(code, message, exitCode) {
|
|
19
|
+
super(message);
|
|
20
|
+
this.code = code;
|
|
21
|
+
this.exitCode = exitCode;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export async function runSetupCommand(opts) {
|
|
25
|
+
try {
|
|
26
|
+
const project = await validateProject(opts.projectPath);
|
|
27
|
+
const client = validateClient(opts.client);
|
|
28
|
+
const pins = packagePins(opts.version);
|
|
29
|
+
const placement = resolvePlacement(project, client, opts);
|
|
30
|
+
const warnings = [...placement.warnings];
|
|
31
|
+
const manifestPath = join(project, "Packages", "manifest.json");
|
|
32
|
+
const manifest = await readJsonObject(manifestPath, false);
|
|
33
|
+
const dependencies = manifest.dependencies;
|
|
34
|
+
if (!isRecord(dependencies)) {
|
|
35
|
+
throw new SetupError("invalid_manifest", `${manifestPath} must contain a JSON object at 'dependencies'.`, 1);
|
|
36
|
+
}
|
|
37
|
+
dependencies[BRIDGE_PACKAGE] = pins.bridge;
|
|
38
|
+
dependencies[VERIFY_PACKAGE] = pins.verify;
|
|
39
|
+
// Client config and the agent skill live where the AI client is opened —
|
|
40
|
+
// the workspace root, which equals the Unity root for a plain layout.
|
|
41
|
+
const configPath = configPathFor(placement.workspace, client);
|
|
42
|
+
const config = await readJsonObject(configPath, true);
|
|
43
|
+
const entry = mergeClientConfig(config, client, project, pins.npm, placement);
|
|
44
|
+
const wrapperPath = placement.emitWrapper
|
|
45
|
+
? join(placement.workspace, ...wrapperRelativePath(placement.layout).split("/"))
|
|
46
|
+
: null;
|
|
47
|
+
const wrapperBody = placement.emitWrapper
|
|
48
|
+
? renderWrapperScript({
|
|
49
|
+
version: opts.version,
|
|
50
|
+
layout: placement.layout,
|
|
51
|
+
unitySubpath: placement.unitySubpath,
|
|
52
|
+
})
|
|
53
|
+
: null;
|
|
54
|
+
let skillBytes = null;
|
|
55
|
+
let skillPath = null;
|
|
56
|
+
if (!opts.skipSkill) {
|
|
57
|
+
skillPath = join(placement.workspace, clientSkillRelativePath(client));
|
|
58
|
+
const source = opts.skillSourcePath ?? resolveBundledSkillPath();
|
|
59
|
+
if (!source) {
|
|
60
|
+
throw new SetupError("skill_not_bundled", "The packaged core skill could not be located. Reinstall unity-open-mcp and retry.", 1);
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
skillBytes = await readFile(source);
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
throw ioError(`Could not read bundled skill at ${source}`, error);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
if (!opts.dryRun) {
|
|
70
|
+
await writeJson(manifestPath, manifest);
|
|
71
|
+
await writeJson(configPath, config);
|
|
72
|
+
if (skillBytes && skillPath) {
|
|
73
|
+
try {
|
|
74
|
+
await mkdir(dirname(skillPath), { recursive: true });
|
|
75
|
+
await writeFile(skillPath, skillBytes);
|
|
76
|
+
await copySkillReferences(opts.skillSourcePath ?? resolveBundledSkillPath(), skillPath);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
throw ioError(`Could not write skill to ${skillPath}`, error);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (wrapperPath && wrapperBody !== null) {
|
|
83
|
+
try {
|
|
84
|
+
await mkdir(dirname(wrapperPath), { recursive: true });
|
|
85
|
+
await writeFile(wrapperPath, wrapperBody, { mode: 0o755 });
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
throw ioError(`Could not write wrapper script to ${wrapperPath}`, error);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
const report = {
|
|
93
|
+
version: opts.version,
|
|
94
|
+
project,
|
|
95
|
+
client,
|
|
96
|
+
dryRun: opts.dryRun,
|
|
97
|
+
workspace: placement.workspace,
|
|
98
|
+
layout: placement.layout,
|
|
99
|
+
unitySubpath: placement.unitySubpath,
|
|
100
|
+
portable: placement.portable,
|
|
101
|
+
configStrategy: placement.strategy,
|
|
102
|
+
wrapper: {
|
|
103
|
+
path: wrapperPath,
|
|
104
|
+
written: !opts.dryRun && wrapperPath !== null,
|
|
105
|
+
},
|
|
106
|
+
manifest: {
|
|
107
|
+
path: manifestPath,
|
|
108
|
+
written: !opts.dryRun,
|
|
109
|
+
dependencies: {
|
|
110
|
+
[BRIDGE_PACKAGE]: pins.bridge,
|
|
111
|
+
[VERIFY_PACKAGE]: pins.verify,
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
mcpConfig: {
|
|
115
|
+
path: configPath,
|
|
116
|
+
written: !opts.dryRun,
|
|
117
|
+
entry,
|
|
118
|
+
},
|
|
119
|
+
skill: {
|
|
120
|
+
skipped: opts.skipSkill,
|
|
121
|
+
path: skillPath,
|
|
122
|
+
written: !opts.dryRun && !opts.skipSkill,
|
|
123
|
+
bytes: skillBytes?.byteLength ?? 0,
|
|
124
|
+
lines: skillBytes ? countLines(skillBytes) : 0,
|
|
125
|
+
},
|
|
126
|
+
warnings,
|
|
127
|
+
userAction: [
|
|
128
|
+
`Open Unity with ${project} and wait for compilation to finish.`,
|
|
129
|
+
"Restart the MCP / AI client so it reloads the updated configuration.",
|
|
130
|
+
],
|
|
131
|
+
};
|
|
132
|
+
return { exitCode: 0, json: report, human: formatSetupReport(report) };
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
const setupError = error instanceof SetupError
|
|
136
|
+
? error
|
|
137
|
+
: new SetupError("setup_failed", error instanceof Error ? error.message : String(error), 1);
|
|
138
|
+
const report = {
|
|
139
|
+
version: opts.version,
|
|
140
|
+
project: opts.projectPath ?? null,
|
|
141
|
+
client: opts.client ?? null,
|
|
142
|
+
dryRun: opts.dryRun,
|
|
143
|
+
error: { code: setupError.code, message: setupError.message },
|
|
144
|
+
warnings: [],
|
|
145
|
+
};
|
|
146
|
+
return {
|
|
147
|
+
exitCode: setupError.exitCode,
|
|
148
|
+
json: report,
|
|
149
|
+
human: `Setup failed: ${setupError.message}`,
|
|
150
|
+
errorLabel: setupError.code,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
async function validateProject(input) {
|
|
155
|
+
if (!input) {
|
|
156
|
+
throw new SetupError("missing_project", "setup requires --project <absolute Unity project path>.", 2);
|
|
157
|
+
}
|
|
158
|
+
if (!isAbsolute(input)) {
|
|
159
|
+
throw new SetupError("project_not_absolute", `--project must be absolute (received '${input}').`, 2);
|
|
160
|
+
}
|
|
161
|
+
const project = resolve(input);
|
|
162
|
+
const validation = validateUnityProjectRoot(project);
|
|
163
|
+
if (!validation.valid) {
|
|
164
|
+
throw new SetupError("not_unity_project", `${project} is not a Unity project root: missing ${validation.missing.map((m) => `${m}/`).join(", ")}.`, 2);
|
|
165
|
+
}
|
|
166
|
+
return project;
|
|
167
|
+
}
|
|
168
|
+
function validateClient(input) {
|
|
169
|
+
const known = knownClientKeys();
|
|
170
|
+
if (!input) {
|
|
171
|
+
throw new SetupError("missing_client", `setup requires --client <id>. Known ids: ${known.join(", ")}.`, 2);
|
|
172
|
+
}
|
|
173
|
+
if (!known.includes(input)) {
|
|
174
|
+
throw new SetupError("unknown_client", `Unknown client '${input}'. Known ids: ${known.join(", ")}.`, 2);
|
|
175
|
+
}
|
|
176
|
+
if (!CONFIG_CLIENTS.includes(input)) {
|
|
177
|
+
throw new SetupError("unsupported_client_config", `Client '${input}' has a skill path but no setup config writer. Configure MCP manually; skill-only is not enough. Setup config writers: ${CONFIG_CLIENTS.join(", ")}.`, 2);
|
|
178
|
+
}
|
|
179
|
+
return input;
|
|
180
|
+
}
|
|
181
|
+
function resolvePlacement(project, client, opts) {
|
|
182
|
+
const warnings = [];
|
|
183
|
+
const requestedSubpath = normalizeSubpath(opts.unitySubpath);
|
|
184
|
+
let workspace;
|
|
185
|
+
if (opts.workspacePath) {
|
|
186
|
+
if (!isAbsolute(opts.workspacePath)) {
|
|
187
|
+
throw new SetupError("workspace_not_absolute", `--workspace must be absolute (received '${opts.workspacePath}').`, 2);
|
|
188
|
+
}
|
|
189
|
+
workspace = resolve(opts.workspacePath);
|
|
190
|
+
}
|
|
191
|
+
else if (requestedSubpath) {
|
|
192
|
+
// Derive the workspace by stripping the subpath off the Unity root, so
|
|
193
|
+
// `--project /abs/repo/Client --unity-subpath Client` needs no --workspace.
|
|
194
|
+
workspace = resolve(project, ...requestedSubpath.split("/").map(() => ".."));
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
workspace = project;
|
|
198
|
+
}
|
|
199
|
+
const derived = relativeSubpath(workspace, project);
|
|
200
|
+
if (derived === undefined) {
|
|
201
|
+
throw new SetupError("project_outside_workspace", `--project ${project} is not inside --workspace ${workspace}.`, 2);
|
|
202
|
+
}
|
|
203
|
+
if (requestedSubpath && requestedSubpath !== derived) {
|
|
204
|
+
throw new SetupError("subpath_mismatch", `--unity-subpath '${requestedSubpath}' does not match the Unity root under the workspace ('${derived || "."}').`, 2);
|
|
205
|
+
}
|
|
206
|
+
const unitySubpath = derived;
|
|
207
|
+
const layout = opts.layout ?? (unitySubpath ? "monorepo" : "unity-root");
|
|
208
|
+
if (layout === "monorepo" && !unitySubpath) {
|
|
209
|
+
throw new SetupError("missing_unity_subpath", "--layout monorepo requires --unity-subpath <relative-path> (or --workspace <repo root>).", 2);
|
|
210
|
+
}
|
|
211
|
+
if (layout === "unity-root" && unitySubpath) {
|
|
212
|
+
throw new SetupError("layout_conflict", `--layout unity-root conflicts with a Unity project at '${unitySubpath}' below the workspace; use --layout monorepo.`, 2);
|
|
213
|
+
}
|
|
214
|
+
const support = portableSupportFor(catalogIdForSetupClient(client));
|
|
215
|
+
// Portable by default exactly where the absolute path is the real problem:
|
|
216
|
+
// a monorepo whose config file is not inside the Unity project.
|
|
217
|
+
let portable = opts.portable ?? layout === "monorepo";
|
|
218
|
+
if (portable && support?.strategy === "absolute") {
|
|
219
|
+
warnings.push(`Client '${client}' has no portable configuration form; writing the absolute path.`);
|
|
220
|
+
portable = false;
|
|
221
|
+
}
|
|
222
|
+
if (portable && !support) {
|
|
223
|
+
warnings.push(`Client '${client}' is not in the portable-config catalog; writing the absolute path.`);
|
|
224
|
+
portable = false;
|
|
225
|
+
}
|
|
226
|
+
const strategy = portable && support ? support.strategy : "absolute";
|
|
227
|
+
const emitWrapper = (portable && strategy === "wrapper") || opts.wrapper === true;
|
|
228
|
+
return {
|
|
229
|
+
workspace,
|
|
230
|
+
layout,
|
|
231
|
+
unitySubpath,
|
|
232
|
+
portable,
|
|
233
|
+
strategy,
|
|
234
|
+
support,
|
|
235
|
+
emitWrapper,
|
|
236
|
+
warnings,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
/** `Client`, `Client/`, `.\Client` → `Client`; empty/`.` → "". */
|
|
240
|
+
function normalizeSubpath(input) {
|
|
241
|
+
if (!input)
|
|
242
|
+
return "";
|
|
243
|
+
const posix = input.split("\\").join("/");
|
|
244
|
+
const segments = posix
|
|
245
|
+
.split("/")
|
|
246
|
+
.map((segment) => segment.trim())
|
|
247
|
+
.filter((segment) => segment.length > 0 && segment !== ".");
|
|
248
|
+
if (segments.some((segment) => segment === "..")) {
|
|
249
|
+
throw new SetupError("invalid_unity_subpath", `--unity-subpath must stay inside the workspace (received '${input}').`, 2);
|
|
250
|
+
}
|
|
251
|
+
return segments.join("/");
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* POSIX-separated path from `workspace` down to `project`, "" when they are the
|
|
255
|
+
* same folder, `undefined` when `project` is outside `workspace`.
|
|
256
|
+
*/
|
|
257
|
+
function relativeSubpath(workspace, project) {
|
|
258
|
+
const rel = relative(workspace, project);
|
|
259
|
+
if (rel === "")
|
|
260
|
+
return "";
|
|
261
|
+
if (rel.startsWith("..") || isAbsolute(rel))
|
|
262
|
+
return undefined;
|
|
263
|
+
return rel.split(sep).join("/");
|
|
264
|
+
}
|
|
265
|
+
export function packagePins(version) {
|
|
266
|
+
return {
|
|
267
|
+
npm: `unity-open-mcp@${version}`,
|
|
268
|
+
bridge: `${REPOSITORY_URL}?path=packages/bridge#bridge-v${version}`,
|
|
269
|
+
verify: `${REPOSITORY_URL}?path=packages/verify#verify-v${version}`,
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
function configPathFor(workspace, client) {
|
|
273
|
+
switch (client) {
|
|
274
|
+
case "cursor":
|
|
275
|
+
return join(workspace, ".cursor", "mcp.json");
|
|
276
|
+
case "claude":
|
|
277
|
+
return join(workspace, ".mcp.json");
|
|
278
|
+
case "opencode":
|
|
279
|
+
return join(workspace, "opencode.json");
|
|
280
|
+
case "agents":
|
|
281
|
+
return join(workspace, ".mcp.json");
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Merge the `unity-open-mcp` entry into an existing client config, preserving
|
|
286
|
+
* sibling servers and any extra keys the user added.
|
|
287
|
+
*
|
|
288
|
+
* A portable re-run REPLACES the absolute `UNITY_PROJECT_PATH` left by an
|
|
289
|
+
* earlier absolute run (and vice versa), because leaving a stale machine path
|
|
290
|
+
* behind would silently keep winning over `--project-from-cwd`.
|
|
291
|
+
*/
|
|
292
|
+
function mergeClientConfig(config, client, project, npmPin, placement) {
|
|
293
|
+
const launch = launchFields(project, npmPin, placement);
|
|
294
|
+
if (client === "opencode") {
|
|
295
|
+
const mcp = ensureObject(config, "mcp");
|
|
296
|
+
const previous = isRecord(mcp[SERVER_KEY]) ? mcp[SERVER_KEY] : {};
|
|
297
|
+
const previousEnvironment = isRecord(previous.environment)
|
|
298
|
+
? previous.environment
|
|
299
|
+
: {};
|
|
300
|
+
const entry = {
|
|
301
|
+
...previous,
|
|
302
|
+
type: "local",
|
|
303
|
+
command: [launch.command, ...launch.args],
|
|
304
|
+
enabled: true,
|
|
305
|
+
environment: mergeProjectEnv(previousEnvironment, launch.env),
|
|
306
|
+
};
|
|
307
|
+
mcp[SERVER_KEY] = entry;
|
|
308
|
+
return entry;
|
|
309
|
+
}
|
|
310
|
+
const servers = ensureObject(config, "mcpServers");
|
|
311
|
+
const previous = isRecord(servers[SERVER_KEY]) ? servers[SERVER_KEY] : {};
|
|
312
|
+
const previousEnv = isRecord(previous.env) ? previous.env : {};
|
|
313
|
+
const entry = {
|
|
314
|
+
...previous,
|
|
315
|
+
command: launch.command,
|
|
316
|
+
args: launch.args,
|
|
317
|
+
env: mergeProjectEnv(previousEnv, launch.env),
|
|
318
|
+
};
|
|
319
|
+
servers[SERVER_KEY] = entry;
|
|
320
|
+
return entry;
|
|
321
|
+
}
|
|
322
|
+
function launchFields(project, npmPin, placement) {
|
|
323
|
+
if (!placement.portable || !placement.support) {
|
|
324
|
+
return {
|
|
325
|
+
command: "npx",
|
|
326
|
+
args: ["-y", npmPin],
|
|
327
|
+
env: { [PROJECT_PATH_ENV_VAR]: project },
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
const target = {
|
|
331
|
+
layout: placement.layout,
|
|
332
|
+
unitySubpath: placement.unitySubpath,
|
|
333
|
+
npmPin,
|
|
334
|
+
};
|
|
335
|
+
if (placement.strategy === "wrapper") {
|
|
336
|
+
return {
|
|
337
|
+
command: "bash",
|
|
338
|
+
args: [wrapperRelativePath(placement.layout)],
|
|
339
|
+
env: {},
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
return {
|
|
343
|
+
command: "npx",
|
|
344
|
+
args: portableServerArgs(placement.strategy, target),
|
|
345
|
+
env: portableEnv(placement.support, target),
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Keep every env key the user added, but let this run own
|
|
350
|
+
* `UNITY_PROJECT_PATH`: set it for absolute/interpolated strategies, drop it
|
|
351
|
+
* for the strategies that resolve the path at runtime.
|
|
352
|
+
*/
|
|
353
|
+
function mergeProjectEnv(previous, next) {
|
|
354
|
+
const merged = { ...previous, ...next };
|
|
355
|
+
if (next[PROJECT_PATH_ENV_VAR] === undefined)
|
|
356
|
+
delete merged[PROJECT_PATH_ENV_VAR];
|
|
357
|
+
return merged;
|
|
358
|
+
}
|
|
359
|
+
function ensureObject(parent, key) {
|
|
360
|
+
if (parent[key] === undefined)
|
|
361
|
+
parent[key] = {};
|
|
362
|
+
if (!isRecord(parent[key])) {
|
|
363
|
+
throw new SetupError("invalid_client_config", `Client config key '${key}' must be a JSON object.`, 1);
|
|
364
|
+
}
|
|
365
|
+
return parent[key];
|
|
366
|
+
}
|
|
367
|
+
async function readJsonObject(path, allowMissing) {
|
|
368
|
+
let raw;
|
|
369
|
+
try {
|
|
370
|
+
raw = await readFile(path, "utf8");
|
|
371
|
+
}
|
|
372
|
+
catch (error) {
|
|
373
|
+
if (allowMissing && isNodeError(error) && error.code === "ENOENT")
|
|
374
|
+
return {};
|
|
375
|
+
throw ioError(`Could not read ${path}`, error);
|
|
376
|
+
}
|
|
377
|
+
try {
|
|
378
|
+
const parsed = JSON.parse(raw);
|
|
379
|
+
if (!isRecord(parsed)) {
|
|
380
|
+
throw new Error("top level must be a JSON object");
|
|
381
|
+
}
|
|
382
|
+
return parsed;
|
|
383
|
+
}
|
|
384
|
+
catch (error) {
|
|
385
|
+
throw new SetupError("invalid_json", `${path} is not valid JSON: ${error instanceof Error ? error.message : String(error)}`, 1);
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
async function writeJson(path, value) {
|
|
389
|
+
try {
|
|
390
|
+
await mkdir(dirname(path), { recursive: true });
|
|
391
|
+
await writeFile(path, `${JSON.stringify(value, null, 2)}\n`, "utf8");
|
|
392
|
+
}
|
|
393
|
+
catch (error) {
|
|
394
|
+
throw ioError(`Could not write ${path}`, error);
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
function resolveBundledSkillPath() {
|
|
398
|
+
const moduleDir = dirname(fileURLToPath(import.meta.url));
|
|
399
|
+
// Published package: dist/cli/setup-command.js -> dist/skill/SKILL.md.
|
|
400
|
+
const packaged = join(moduleDir, "..", "skill", "SKILL.md");
|
|
401
|
+
// Source-checkout fallback supports direct development invocations.
|
|
402
|
+
return resolveTemplateSkillPath() ?? packaged;
|
|
403
|
+
}
|
|
404
|
+
function formatSetupReport(report) {
|
|
405
|
+
const mode = report.dryRun ? "DRY RUN — no files changed" : "Setup complete";
|
|
406
|
+
const skill = report.skill.skipped
|
|
407
|
+
? "skipped (--skip-skill)"
|
|
408
|
+
: `${report.skill.path} (${report.skill.bytes} bytes, ${report.skill.lines} lines)`;
|
|
409
|
+
const lines = [
|
|
410
|
+
mode,
|
|
411
|
+
`VERSION: ${report.version}`,
|
|
412
|
+
`Project: ${report.project}`,
|
|
413
|
+
`Client: ${report.client}`,
|
|
414
|
+
`UPM bridge: ${report.manifest.dependencies[BRIDGE_PACKAGE]}`,
|
|
415
|
+
`UPM verify: ${report.manifest.dependencies[VERIFY_PACKAGE]}`,
|
|
416
|
+
`MCP config: ${report.mcpConfig.path}`,
|
|
417
|
+
`Skill: ${skill}`,
|
|
418
|
+
"Domain packages: not installed",
|
|
419
|
+
];
|
|
420
|
+
if (report.layout === "monorepo" || report.portable) {
|
|
421
|
+
lines.push(`Workspace: ${report.workspace}`, `Layout: ${report.layout}${report.unitySubpath ? ` (Unity at ${report.unitySubpath}/)` : ""}`, `Config: ${report.portable ? `portable — safe to commit (${report.configStrategy})` : "absolute path"}`);
|
|
422
|
+
}
|
|
423
|
+
if (report.wrapper.path)
|
|
424
|
+
lines.push(`Wrapper: ${report.wrapper.path}`);
|
|
425
|
+
for (const warning of report.warnings)
|
|
426
|
+
lines.push(`Warning: ${warning}`);
|
|
427
|
+
lines.push("", "USER ACTION:", `1. ${report.userAction[0]}`, `2. ${report.userAction[1]}`);
|
|
428
|
+
return lines.join("\n");
|
|
429
|
+
}
|
|
430
|
+
function countLines(bytes) {
|
|
431
|
+
if (bytes.byteLength === 0)
|
|
432
|
+
return 0;
|
|
433
|
+
const text = bytes.toString("utf8");
|
|
434
|
+
const newlines = (text.match(/\n/g) ?? []).length;
|
|
435
|
+
return text.endsWith("\n") ? newlines : newlines + 1;
|
|
436
|
+
}
|
|
437
|
+
function isNodeError(error) {
|
|
438
|
+
return error instanceof Error && "code" in error;
|
|
439
|
+
}
|
|
440
|
+
function ioError(context, error) {
|
|
441
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
442
|
+
return new SetupError("io_error", `${context}: ${detail}`, 1);
|
|
443
|
+
}
|
|
444
|
+
//# sourceMappingURL=setup-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-command.js","sourceRoot":"","sources":["../../src/cli/setup-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { CliCommandResult } from "./commands.js";
|
|
2
|
+
export { compareSemver, resolveLatestVersion } from "../release-lookup.js";
|
|
3
|
+
export type { ReleaseSource } from "../release-lookup.js";
|
|
4
|
+
export declare const UPDATE_EXIT: {
|
|
5
|
+
readonly AVAILABLE: 10;
|
|
6
|
+
readonly LOOKUP_FAILED: 11;
|
|
7
|
+
readonly INSTALL_FAILED: 12;
|
|
8
|
+
};
|
|
9
|
+
export type InstallMode = "npx" | "global" | "local" | "unknown";
|
|
10
|
+
export interface ProcessResult {
|
|
11
|
+
exitCode: number;
|
|
12
|
+
stdout: string;
|
|
13
|
+
stderr: string;
|
|
14
|
+
}
|
|
15
|
+
export interface UpdateCommandDependencies {
|
|
16
|
+
fetch: typeof globalThis.fetch;
|
|
17
|
+
runProcess: (command: string, args: string[], cwd?: string) => Promise<ProcessResult>;
|
|
18
|
+
env: NodeJS.ProcessEnv;
|
|
19
|
+
packageRoot: string;
|
|
20
|
+
cwd: string;
|
|
21
|
+
/** Reads a UTF-8 text file; rejects when it does not exist. */
|
|
22
|
+
readTextFile: (path: string) => Promise<string>;
|
|
23
|
+
}
|
|
24
|
+
export interface UpdateCommandOptions {
|
|
25
|
+
currentVersion: string;
|
|
26
|
+
check: boolean;
|
|
27
|
+
json: boolean;
|
|
28
|
+
dependencies?: Partial<UpdateCommandDependencies>;
|
|
29
|
+
}
|
|
30
|
+
export declare function runUpdateCommand(options: UpdateCommandOptions): Promise<CliCommandResult>;
|