@atelierai/uco 1.0.6 → 1.0.7
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/CHANGELOG.md +21 -0
- package/README.md +7 -8
- package/bin/server.mjs +1 -1
- package/bin/stub-plugin.mjs +3 -3
- package/dist/codegen/coerce.js +1 -1
- package/dist/codegen/coerce.js.map +1 -1
- package/dist/codegen/emit.js +2 -2
- package/dist/codegen/emit.js.map +1 -1
- package/dist/codegen/refs.js +1 -1
- package/dist/codegen/refs.js.map +1 -1
- package/dist/codegen/types.js +1 -1
- package/dist/codegen/types.js.map +1 -1
- package/dist/commands/call.js +1 -1
- package/dist/commands/call.js.map +1 -1
- package/dist/commands/devops/configure.js +1 -1
- package/dist/commands/devops/configure.js.map +1 -1
- package/dist/commands/devops/index.js +0 -4
- package/dist/commands/devops/index.js.map +1 -1
- package/dist/commands/devops/install-plugin.js +1 -1
- package/dist/commands/devops/install-plugin.js.map +1 -1
- package/dist/commands/devops/open.js +7 -7
- package/dist/commands/devops/open.js.map +1 -1
- package/dist/commands/devops/status.js +3 -3
- package/dist/commands/devops/status.js.map +1 -1
- package/dist/commands/exec.js +1 -1
- package/dist/commands/exec.js.map +1 -1
- package/dist/commands/install.js +2 -2
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/prompt.js +2 -2
- package/dist/commands/prompt.js.map +1 -1
- package/dist/commands/resource.js +2 -2
- package/dist/commands/resource.js.map +1 -1
- package/dist/commands/update.js +1 -26
- package/dist/commands/update.js.map +1 -1
- package/dist/config/port.js +2 -2
- package/dist/config/port.js.map +1 -1
- package/dist/config/resolve.d.ts +1 -2
- package/dist/config/resolve.js +0 -12
- package/dist/config/resolve.js.map +1 -1
- package/dist/devops/lib/configure.d.ts +1 -1
- package/dist/devops/lib/configure.js +2 -2
- package/dist/devops/lib/configure.js.map +1 -1
- package/dist/devops/lib/install-plugin.d.ts +1 -1
- package/dist/devops/lib/install-plugin.js +1 -1
- package/dist/devops/lib/install-plugin.js.map +1 -1
- package/dist/devops/lib/install.d.ts +2 -2
- package/dist/devops/lib/install.js +5 -5
- package/dist/devops/lib/install.js.map +1 -1
- package/dist/devops/lib/open.js +11 -32
- package/dist/devops/lib/open.js.map +1 -1
- package/dist/devops/lib/remove-plugin.d.ts +1 -1
- package/dist/devops/lib/remove-plugin.js +3 -3
- package/dist/devops/lib/remove-plugin.js.map +1 -1
- package/dist/devops/lib/run-tool.d.ts +2 -2
- package/dist/devops/lib/run-tool.js +2 -2
- package/dist/devops/lib/types.d.ts +17 -54
- package/dist/devops/lib/types.js +2 -2
- package/dist/devops/lib/types.js.map +1 -1
- package/dist/devops/lib/update.d.ts +0 -15
- package/dist/devops/lib/update.js +2 -91
- package/dist/devops/lib/update.js.map +1 -1
- package/dist/devops/utils/agents.d.ts +0 -28
- package/dist/devops/utils/agents.js +0 -462
- package/dist/devops/utils/agents.js.map +1 -1
- package/dist/devops/utils/config.d.ts +9 -18
- package/dist/devops/utils/config.js +7 -20
- package/dist/devops/utils/config.js.map +1 -1
- package/dist/devops/utils/editor-cache.js +1 -1
- package/dist/devops/utils/editor-cache.js.map +1 -1
- package/dist/devops/utils/launch-error-dismiss.d.ts +2 -2
- package/dist/devops/utils/launch-error-dismiss.js +5 -5
- package/dist/devops/utils/manifest.d.ts +2 -2
- package/dist/devops/utils/manifest.js +3 -3
- package/dist/devops/utils/manifest.js.map +1 -1
- package/dist/devops/utils/port.d.ts +1 -1
- package/dist/devops/utils/port.js +1 -1
- package/dist/devops/utils/probe.d.ts +1 -1
- package/dist/devops/utils/probe.js +1 -1
- package/dist/devops/utils/ui.js +2 -2
- package/dist/devops/utils/ui.js.map +1 -1
- package/dist/devops/utils/unity-editor.js +4 -4
- package/dist/devops/utils/unity-editor.js.map +1 -1
- package/dist/devops/utils/unity-hub.js +1 -1
- package/dist/devops/utils/unity-hub.js.map +1 -1
- package/dist/devops/utils/unity-shutdown.d.ts +1 -1
- package/dist/devops/utils/unity-shutdown.js +1 -1
- package/dist/devops/utils/update-check.js +3 -3
- package/dist/devops/utils/update-check.js.map +1 -1
- package/dist/devops/utils/vendor.d.ts +2 -2
- package/dist/devops/utils/vendor.js +4 -4
- package/dist/devops/utils/vendor.js.map +1 -1
- package/dist/generated/tools.js +1 -1
- package/dist/generated/tools.js.map +1 -1
- package/dist/program.js +3 -3
- package/dist/program.js.map +1 -1
- package/dist/server/app.d.ts +5 -5
- package/dist/server/app.js +3 -3
- package/dist/server/app.js.map +1 -1
- package/dist/server/index.d.ts +2 -2
- package/dist/server/index.js +2 -2
- package/dist/server/index.js.map +1 -1
- package/dist/server/rest/auth.d.ts +1 -1
- package/dist/server/rest/auth.js +3 -3
- package/dist/server/rest/auth.js.map +1 -1
- package/dist/server/rest/context.d.ts +2 -2
- package/dist/server/rest/forward.d.ts +2 -2
- package/dist/server/session/store.d.ts +3 -3
- package/dist/server/session/store.js +4 -4
- package/dist/server/session/store.js.map +1 -1
- package/dist/server/stub-client/scenarios.js +8 -8
- package/dist/server/stub-client/scenarios.js.map +1 -1
- package/dist/server/types.d.ts +11 -11
- package/dist/server/types.js +9 -9
- package/dist/server/types.js.map +1 -1
- package/dist/server/ws/hub.d.ts +8 -8
- package/dist/server/ws/hub.js +13 -13
- package/dist/server/ws/hub.js.map +1 -1
- package/dist/server/ws/rpc.d.ts +3 -3
- package/dist/server/ws/rpc.js +4 -4
- package/dist/server/ws/rpc.js.map +1 -1
- package/dist/transport/index.d.ts +1 -1
- package/dist/transport/index.js +3 -3
- package/dist/transport/index.js.map +1 -1
- package/dist/transport/rest.js +1 -1
- package/dist/transport/rest.js.map +1 -1
- package/docs/INSTALL.zh-CN.md +2 -3
- package/package.json +1 -1
- package/skills/uco-setup/SKILL.md +1 -1
- package/skills/unity-editor/references/diagnostics.md +24 -24
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Components/ExtensionPanel.cs +379 -379
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/MenuItems.cs +72 -72
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/UnityCopilotProjectSettingsProvider.cs +64 -64
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/MainWindowEditor.CopilotServer.cs +372 -372
- package/vendor/plugin/com.atelierai.unity.copilot/Plugins/ReflectorNet.dll +0 -0
- package/vendor/plugin/com.atelierai.unity.copilot/Plugins/Uco.Framework.Common.dll +0 -0
- package/vendor/plugin/com.atelierai.unity.copilot/Plugins/Uco.Framework.dll +0 -0
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/UnityCopilotPlugin.Config.cs +175 -175
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/UnityCopilotPlugin.cs +1 -1
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/Utils/EnvironmentUtils.cs +368 -368
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Environment/EnvironmentUtilsTests.cs +3 -3
- package/vendor/plugin/com.atelierai.unity.copilot/package.json +1 -1
- package/dist/commands/devops/login.d.ts +0 -2
- package/dist/commands/devops/login.js +0 -29
- package/dist/commands/devops/login.js.map +0 -1
- package/dist/commands/devops/setup-mcp.d.ts +0 -2
- package/dist/commands/devops/setup-mcp.js +0 -41
- package/dist/commands/devops/setup-mcp.js.map +0 -1
- package/dist/devops/commands-upstream/bootstrap-local.d.ts +0 -17
- package/dist/devops/commands-upstream/bootstrap-local.js +0 -87
- package/dist/devops/commands-upstream/bootstrap-local.js.map +0 -1
- package/dist/devops/commands-upstream/close.d.ts +0 -57
- package/dist/devops/commands-upstream/close.js +0 -188
- package/dist/devops/commands-upstream/close.js.map +0 -1
- package/dist/devops/commands-upstream/configure.d.ts +0 -2
- package/dist/devops/commands-upstream/configure.js +0 -87
- package/dist/devops/commands-upstream/configure.js.map +0 -1
- package/dist/devops/commands-upstream/create-project.d.ts +0 -2
- package/dist/devops/commands-upstream/create-project.js +0 -43
- package/dist/devops/commands-upstream/create-project.js.map +0 -1
- package/dist/devops/commands-upstream/install-plugin.d.ts +0 -2
- package/dist/devops/commands-upstream/install-plugin.js +0 -64
- package/dist/devops/commands-upstream/install-plugin.js.map +0 -1
- package/dist/devops/commands-upstream/install-unity.d.ts +0 -2
- package/dist/devops/commands-upstream/install-unity.js +0 -72
- package/dist/devops/commands-upstream/install-unity.js.map +0 -1
- package/dist/devops/commands-upstream/login.d.ts +0 -2
- package/dist/devops/commands-upstream/login.js +0 -33
- package/dist/devops/commands-upstream/login.js.map +0 -1
- package/dist/devops/commands-upstream/open.d.ts +0 -32
- package/dist/devops/commands-upstream/open.js +0 -282
- package/dist/devops/commands-upstream/open.js.map +0 -1
- package/dist/devops/commands-upstream/remove-plugin.d.ts +0 -2
- package/dist/devops/commands-upstream/remove-plugin.js +0 -41
- package/dist/devops/commands-upstream/remove-plugin.js.map +0 -1
- package/dist/devops/commands-upstream/run-system-tool.d.ts +0 -1
- package/dist/devops/commands-upstream/run-system-tool.js +0 -13
- package/dist/devops/commands-upstream/run-system-tool.js.map +0 -1
- package/dist/devops/commands-upstream/run-tool-builder.d.ts +0 -25
- package/dist/devops/commands-upstream/run-tool-builder.js +0 -125
- package/dist/devops/commands-upstream/run-tool-builder.js.map +0 -1
- package/dist/devops/commands-upstream/run-tool.d.ts +0 -1
- package/dist/devops/commands-upstream/run-tool.js +0 -13
- package/dist/devops/commands-upstream/run-tool.js.map +0 -1
- package/dist/devops/commands-upstream/setup-mcp.d.ts +0 -2
- package/dist/devops/commands-upstream/setup-mcp.js +0 -68
- package/dist/devops/commands-upstream/setup-mcp.js.map +0 -1
- package/dist/devops/commands-upstream/setup-skills.d.ts +0 -2
- package/dist/devops/commands-upstream/setup-skills.js +0 -167
- package/dist/devops/commands-upstream/setup-skills.js.map +0 -1
- package/dist/devops/commands-upstream/status.d.ts +0 -2
- package/dist/devops/commands-upstream/status.js +0 -87
- package/dist/devops/commands-upstream/status.js.map +0 -1
- package/dist/devops/commands-upstream/update.d.ts +0 -2
- package/dist/devops/commands-upstream/update.js +0 -77
- package/dist/devops/commands-upstream/update.js.map +0 -1
- package/dist/devops/commands-upstream/wait-for-ready.d.ts +0 -2
- package/dist/devops/commands-upstream/wait-for-ready.js +0 -93
- package/dist/devops/commands-upstream/wait-for-ready.js.map +0 -1
- package/dist/devops/lib/setup-mcp.d.ts +0 -35
- package/dist/devops/lib/setup-mcp.js +0 -177
- package/dist/devops/lib/setup-mcp.js.map +0 -1
- package/dist/devops/utils/cloud-login.d.ts +0 -7
- package/dist/devops/utils/cloud-login.js +0 -56
- package/dist/devops/utils/cloud-login.js.map +0 -1
package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Environment/EnvironmentUtilsTests.cs
CHANGED
|
@@ -107,14 +107,14 @@ namespace com.AtelierAI.Unity.Copilot.Editor.Tests
|
|
|
107
107
|
EnvironmentUtils.ApplyEnvironmentOverrides(config, args, env);
|
|
108
108
|
|
|
109
109
|
Assert.AreEqual("FLAG_TOKEN", config.LocalToken,
|
|
110
|
-
"When both --token and
|
|
110
|
+
"When both --token and UNITY_COPILOT_TOKEN are set, the flag must win.");
|
|
111
111
|
}
|
|
112
112
|
|
|
113
113
|
[Test]
|
|
114
114
|
public void Override_UnityMcpStyleFlag_BeatsEnvVar()
|
|
115
115
|
{
|
|
116
|
-
// CLI translates --token foo into
|
|
117
|
-
// accepts --
|
|
116
|
+
// CLI translates --token foo into UNITY_COPILOT_TOKEN env, but the plugin still
|
|
117
|
+
// accepts --UNITY_COPILOT_TOKEN=foo style flags directly. They must beat env vars.
|
|
118
118
|
var config = BuildDiskConfig();
|
|
119
119
|
var args = Args((EnvironmentUtils.EnvToken, "FLAG_VIA_FULL_NAME"));
|
|
120
120
|
var env = Env((EnvironmentUtils.EnvToken, "ENV_TOKEN"));
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"Unity Skills",
|
|
16
16
|
"uco"
|
|
17
17
|
],
|
|
18
|
-
"version": "1.0.
|
|
18
|
+
"version": "1.0.5",
|
|
19
19
|
"unity": "2022.3",
|
|
20
20
|
"description": "uco — Unity Copilot: AI Skills, Tools, and CLI for the Unity Engine, driven over plain REST + WebSocket. Any C# method may be turned into a tool by a single line. Derived from IvanMurzak/Unity-MCP (Apache-2.0).",
|
|
21
21
|
"documentationUrl": "https://github.com/DumoeDss/uco-plugin/tree/main/uco-unity-project/Packages/com.atelierai.unity.copilot#readme",
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
// uco login — authenticate with Unity-MCP cloud (ai-game.dev).
|
|
2
|
-
//
|
|
3
|
-
// Only relevant if the user opts into the cloud mode of the upstream
|
|
4
|
-
// uco bridge server. For local/custom-host usage, this command is a no-op.
|
|
5
|
-
import { runCommand, CliError } from '../../util/cli-context.js';
|
|
6
|
-
import { getOrCreateConfig, CLOUD_SERVER_BASE_URL } from '../../devops/utils/config.js';
|
|
7
|
-
import { runCloudLogin } from '../../devops/utils/cloud-login.js';
|
|
8
|
-
import { resolveProjectArg } from './_helpers.js';
|
|
9
|
-
export function registerLogin(program) {
|
|
10
|
-
program
|
|
11
|
-
.command('login [project]')
|
|
12
|
-
.description(`Authenticate with the Unity-MCP cloud server (${CLOUD_SERVER_BASE_URL}).`)
|
|
13
|
-
.option('--force', 'Re-authenticate even if already logged in', false)
|
|
14
|
-
.action(function (projectArg, opts) {
|
|
15
|
-
return runCommand(this, async (ctx) => {
|
|
16
|
-
const projectPath = resolveProjectArg(ctx, projectArg);
|
|
17
|
-
const config = getOrCreateConfig(projectPath);
|
|
18
|
-
if (config.cloudToken && !opts.force) {
|
|
19
|
-
return { authenticated: true, alreadyLoggedIn: true, server: CLOUD_SERVER_BASE_URL };
|
|
20
|
-
}
|
|
21
|
-
const token = await runCloudLogin(projectPath);
|
|
22
|
-
if (!token) {
|
|
23
|
-
throw new CliError('Cloud login failed or was cancelled.', 'login-failed');
|
|
24
|
-
}
|
|
25
|
-
return { authenticated: true, alreadyLoggedIn: false, server: CLOUD_SERVER_BASE_URL };
|
|
26
|
-
})();
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
//# sourceMappingURL=login.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/devops/login.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,EAAE;AACF,qEAAqE;AACrE,2EAA2E;AAG3E,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAMlD,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,OAAO;SACJ,OAAO,CAAC,iBAAiB,CAAC;SAC1B,WAAW,CAAC,iDAAiD,qBAAqB,IAAI,CAAC;SACvF,MAAM,CAAC,SAAS,EAAE,2CAA2C,EAAE,KAAK,CAAC;SACrE,MAAM,CAAC,UAAyB,UAA8B,EAAE,IAAe;QAC9E,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YACpC,MAAM,WAAW,GAAG,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;YAC9C,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACrC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;YACvF,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,CAAC;YAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,QAAQ,CAAC,sCAAsC,EAAE,cAAc,CAAC,CAAC;YAC7E,CAAC;YACD,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;QACxF,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
// uco setup-mcp — write an MCP client config file for a chosen AI agent
|
|
2
|
-
// (claude-code, cursor, codex, ...). Lets a normal MCP client connect to
|
|
3
|
-
// the same uco bridge server uco targets, when the user wants to mix
|
|
4
|
-
// both modalities.
|
|
5
|
-
import { runCommand, CliError } from '../../util/cli-context.js';
|
|
6
|
-
import { setupMcp, listAgentIds } from '../../devops/lib/setup-mcp.js';
|
|
7
|
-
import { resolveProjectArg, progressLogger, unwrapResult } from './_helpers.js';
|
|
8
|
-
export function registerSetupMcp(program) {
|
|
9
|
-
program
|
|
10
|
-
.command('setup-mcp [agent] [project]')
|
|
11
|
-
.description('Write an MCP client config for the chosen agent. Run with --list to see supported agents.')
|
|
12
|
-
.option('--list', 'List supported agent IDs and exit')
|
|
13
|
-
.option('--transport <kind>', 'Transport: http (default) or stdio', 'http')
|
|
14
|
-
.option('--url <url>', 'Server URL override')
|
|
15
|
-
.option('--token <token>', 'Bearer token override')
|
|
16
|
-
.action(function (agentArg, projectArg, opts) {
|
|
17
|
-
return runCommand(this, async (ctx) => {
|
|
18
|
-
if (opts.list) {
|
|
19
|
-
return { agents: listAgentIds() };
|
|
20
|
-
}
|
|
21
|
-
if (!agentArg) {
|
|
22
|
-
throw new CliError('Missing <agent>. Use `uco setup-mcp --list` to see available agents.', 'missing-agent');
|
|
23
|
-
}
|
|
24
|
-
const transport = (opts.transport ?? 'http');
|
|
25
|
-
if (transport !== 'http' && transport !== 'stdio') {
|
|
26
|
-
throw new CliError(`Invalid --transport: ${transport}. Use 'http' or 'stdio'.`, 'invalid-transport');
|
|
27
|
-
}
|
|
28
|
-
const projectPath = resolveProjectArg(ctx, projectArg);
|
|
29
|
-
const result = await setupMcp({
|
|
30
|
-
agentId: agentArg,
|
|
31
|
-
unityProjectPath: projectPath,
|
|
32
|
-
transport,
|
|
33
|
-
...(opts.url ? { url: opts.url } : {}),
|
|
34
|
-
...(opts.token ? { token: opts.token } : {}),
|
|
35
|
-
onProgress: progressLogger(ctx),
|
|
36
|
-
});
|
|
37
|
-
return unwrapResult(result);
|
|
38
|
-
})();
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
//# sourceMappingURL=setup-mcp.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"setup-mcp.js","sourceRoot":"","sources":["../../../src/commands/devops/setup-mcp.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,yEAAyE;AACzE,qEAAqE;AACrE,mBAAmB;AAGnB,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAEvE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAShF,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,OAAO;SACJ,OAAO,CAAC,6BAA6B,CAAC;SACtC,WAAW,CAAC,2FAA2F,CAAC;SACxG,MAAM,CAAC,QAAQ,EAAE,mCAAmC,CAAC;SACrD,MAAM,CAAC,oBAAoB,EAAE,oCAAoC,EAAE,MAAM,CAAC;SAC1E,MAAM,CAAC,aAAa,EAAE,qBAAqB,CAAC;SAC5C,MAAM,CAAC,iBAAiB,EAAE,uBAAuB,CAAC;SAClD,MAAM,CAAC,UAAyB,QAA4B,EAAE,UAA8B,EAAE,IAAkB;QAC/G,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YACpC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,CAAC;YACpC,CAAC;YACD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,QAAQ,CAAC,sEAAsE,EAAE,eAAe,CAAC,CAAC;YAC9G,CAAC;YACD,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,MAAM,CAAiB,CAAC;YAC7D,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;gBAClD,MAAM,IAAI,QAAQ,CAAC,wBAAwB,SAAS,0BAA0B,EAAE,mBAAmB,CAAC,CAAC;YACvG,CAAC;YACD,MAAM,WAAW,GAAG,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC;gBAC5B,OAAO,EAAE,QAAQ;gBACjB,gBAAgB,EAAE,WAAW;gBAC7B,SAAS;gBACT,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5C,UAAU,EAAE,cAAc,CAAC,GAAG,CAAC;aAChC,CAAC,CAAC;YACH,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import { type UnityConnectionConfig } from '../utils/config.js';
|
|
3
|
-
/**
|
|
4
|
-
* Produce a new config object with local-mode fields pinned to `url` / `token`.
|
|
5
|
-
* Preserves all other keys from `current` (immutable update — does not mutate `current`).
|
|
6
|
-
*
|
|
7
|
-
* The plugin-side ConnectionMode enum only accepts "Custom" (local) or "Cloud".
|
|
8
|
-
* We intentionally normalize any integer (0 → Custom, 1 → Cloud) representation
|
|
9
|
-
* to the canonical string "Custom" so the on-disk file is explicit.
|
|
10
|
-
*/
|
|
11
|
-
export declare function pinLocalModeConfig(current: Readonly<UnityConnectionConfig>, url: string, token: string): UnityConnectionConfig;
|
|
12
|
-
/**
|
|
13
|
-
* Returns true iff `current` already reflects local mode with matching url + token.
|
|
14
|
-
* Used to make bootstrap-local a no-op when nothing would change on disk.
|
|
15
|
-
*/
|
|
16
|
-
export declare function isAlreadyPinned(current: Readonly<UnityConnectionConfig>, url: string, token: string): boolean;
|
|
17
|
-
export declare const bootstrapLocalCommand: Command;
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
// Copyright (c) 2025 Ivan Murzak. All rights reserved.
|
|
2
|
-
// Licensed under the Apache License, Version 2.0.
|
|
3
|
-
import { Command } from 'commander';
|
|
4
|
-
import * as path from 'path';
|
|
5
|
-
import * as fs from 'fs';
|
|
6
|
-
import * as ui from '../utils/ui.js';
|
|
7
|
-
import { verbose } from '../utils/ui.js';
|
|
8
|
-
import { resolveAndValidateProjectPath } from '../utils/connection.js';
|
|
9
|
-
import { readConfig, writeConfig, } from '../utils/config.js';
|
|
10
|
-
/**
|
|
11
|
-
* Produce a new config object with local-mode fields pinned to `url` / `token`.
|
|
12
|
-
* Preserves all other keys from `current` (immutable update — does not mutate `current`).
|
|
13
|
-
*
|
|
14
|
-
* The plugin-side ConnectionMode enum only accepts "Custom" (local) or "Cloud".
|
|
15
|
-
* We intentionally normalize any integer (0 → Custom, 1 → Cloud) representation
|
|
16
|
-
* to the canonical string "Custom" so the on-disk file is explicit.
|
|
17
|
-
*/
|
|
18
|
-
export function pinLocalModeConfig(current, url, token) {
|
|
19
|
-
return {
|
|
20
|
-
...current,
|
|
21
|
-
connectionMode: 'Custom',
|
|
22
|
-
host: url,
|
|
23
|
-
token,
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Returns true iff `current` already reflects local mode with matching url + token.
|
|
28
|
-
* Used to make bootstrap-local a no-op when nothing would change on disk.
|
|
29
|
-
*/
|
|
30
|
-
export function isAlreadyPinned(current, url, token) {
|
|
31
|
-
// Accept both "Custom" (string) and 0 (legacy int) as already-local.
|
|
32
|
-
// Anything else (including "Cloud", 1, or unset) means we still need to pin.
|
|
33
|
-
const mode = current.connectionMode;
|
|
34
|
-
if (mode !== 'Custom' && mode !== 0)
|
|
35
|
-
return false;
|
|
36
|
-
return current.host === url && current.token === token;
|
|
37
|
-
}
|
|
38
|
-
export const bootstrapLocalCommand = new Command('bootstrap-local')
|
|
39
|
-
.description('Pin a Unity project\'s MCP config to local mode with the given URL/token. Idempotent.')
|
|
40
|
-
.argument('[path]', 'Unity project path (defaults to cwd)')
|
|
41
|
-
.option('--path <path>', 'Unity project path (defaults to cwd)')
|
|
42
|
-
.requiredOption('--url <url>', 'Local MCP server URL to pin (e.g. http://localhost:5140/)')
|
|
43
|
-
.requiredOption('--token <token>', 'Local MCP bearer token to pin')
|
|
44
|
-
.option('--dry-run', 'Report what would change without writing to disk')
|
|
45
|
-
.action(async (positionalPath, options) => {
|
|
46
|
-
const projectPath = resolveAndValidateProjectPath(positionalPath, options);
|
|
47
|
-
// commander's requiredOption guarantees url/token are defined before the action runs.
|
|
48
|
-
const url = options.url.replace(/\/$/, '');
|
|
49
|
-
const token = options.token;
|
|
50
|
-
verbose(`Project path: ${projectPath}`);
|
|
51
|
-
verbose(`Target URL: ${url}`);
|
|
52
|
-
verbose(`Target token: ${'*'.repeat(Math.min(token.length, 8))}... (length ${token.length})`);
|
|
53
|
-
// uco 0.3.0 renamed the config file; write the new name, but honor a legacy
|
|
54
|
-
// file when it is the only one present (the plugin migrates it on next start).
|
|
55
|
-
const configPath = path.join(projectPath, 'UserSettings', fs.existsSync(path.join(projectPath, 'UserSettings', 'uco-config.json'))
|
|
56
|
-
? 'uco-config.json'
|
|
57
|
-
: 'AI-Game-Developer-Config.json');
|
|
58
|
-
const existedBefore = fs.existsSync(configPath);
|
|
59
|
-
// Use readConfig (not getOrCreateConfig) so --dry-run truly has no side effects.
|
|
60
|
-
// When the file doesn't exist we pin onto an empty base; this mirrors a fresh
|
|
61
|
-
// worktree where the plugin has not yet written its default Cloud config.
|
|
62
|
-
const current = readConfig(projectPath) ?? {};
|
|
63
|
-
if (isAlreadyPinned(current, url, token)) {
|
|
64
|
-
ui.success(`MCP config already pinned to local mode (${url}). No changes written.`);
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
const next = pinLocalModeConfig(current, url, token);
|
|
68
|
-
if (options.dryRun) {
|
|
69
|
-
ui.heading('bootstrap-local (dry run)');
|
|
70
|
-
ui.label('Config file', configPath);
|
|
71
|
-
ui.label('connectionMode', `${String(current.connectionMode ?? 'unset')} → Custom`);
|
|
72
|
-
ui.label('host', `${String(current.host ?? 'unset')} → ${url}`);
|
|
73
|
-
ui.label('token', `${current.token ? '<previous>' : '<unset>'} → <supplied>`);
|
|
74
|
-
ui.info('No changes written (--dry-run).');
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
writeConfig(projectPath, next);
|
|
78
|
-
ui.heading('bootstrap-local');
|
|
79
|
-
ui.label('Config file', configPath);
|
|
80
|
-
ui.label('connectionMode', 'Custom');
|
|
81
|
-
ui.label('host', url);
|
|
82
|
-
ui.label('token', '<supplied>');
|
|
83
|
-
ui.success(existedBefore
|
|
84
|
-
? 'Config updated to pin local mode.'
|
|
85
|
-
: 'Config created and pinned to local mode.');
|
|
86
|
-
});
|
|
87
|
-
//# sourceMappingURL=bootstrap-local.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap-local.js","sourceRoot":"","sources":["../../../src/devops/commands-upstream/bootstrap-local.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import { type SupportedPlatform } from '../utils/unity-shutdown.js';
|
|
3
|
-
export interface CloseOptions {
|
|
4
|
-
timeout?: string;
|
|
5
|
-
timeoutSeconds?: string;
|
|
6
|
-
force?: boolean;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Resolve the project path argument to an absolute, canonical path.
|
|
10
|
-
*
|
|
11
|
-
* Mirrors the convention used by `open` / `wait-for-ready` — accepts a
|
|
12
|
-
* positional argument or `process.cwd()` fallback, normalises symlinks where
|
|
13
|
-
* possible, and trims any trailing path separator. Exported for unit tests.
|
|
14
|
-
*/
|
|
15
|
-
export declare function resolveCloseProjectPath(positionalPath: string | undefined, cwd: string): string;
|
|
16
|
-
/**
|
|
17
|
-
* Returns true when `<projectPath>/ProjectSettings/ProjectVersion.txt` exists.
|
|
18
|
-
*
|
|
19
|
-
* The issue's acceptance criteria require refusing to act on any path that
|
|
20
|
-
* does not look like a Unity project root (`ProjectVersion.txt` is the
|
|
21
|
-
* canonical marker). This is intentionally narrower than the `open`
|
|
22
|
-
* subcommand's check — the goal here is to defend against accidental
|
|
23
|
-
* "kill all Unity processes on host" invocations, so a positive ID of
|
|
24
|
-
* "this is a Unity project" is required.
|
|
25
|
-
*
|
|
26
|
-
* Exported for unit tests.
|
|
27
|
-
*/
|
|
28
|
-
export declare function isUnityProjectRoot(projectPath: string): boolean;
|
|
29
|
-
/**
|
|
30
|
-
* Parse a positive-integer `--timeout` value (seconds). Returns the parsed
|
|
31
|
-
* value, or `null` when the input is not a valid positive integer.
|
|
32
|
-
*
|
|
33
|
-
* The `undefined` branch falls back to the default for ergonomic
|
|
34
|
-
* direct-call use (e.g., unit tests). The action handler never reaches it
|
|
35
|
-
* because commander always materialises the configured default string.
|
|
36
|
-
*
|
|
37
|
-
* Exported for unit tests.
|
|
38
|
-
*/
|
|
39
|
-
export declare function parseTimeoutSeconds(raw: string | undefined): number | null;
|
|
40
|
-
/**
|
|
41
|
-
* Resolve the editor PID for a given project path.
|
|
42
|
-
*
|
|
43
|
-
* Reads `<project>/Temp/UnityLockfile` (4 bytes LE uint32) and enumerates
|
|
44
|
-
* Unity processes by command line, then prefers the lockfile PID when it
|
|
45
|
-
* is alive and matches the enumerated process for this project (handles
|
|
46
|
-
* stale lockfiles); otherwise uses the enumerated PID.
|
|
47
|
-
*
|
|
48
|
-
* Symlink/realpath handling: `resolveCloseProjectPath` canonicalises via
|
|
49
|
-
* `realpathSync` while `findUnityProcess` only `path.resolve`s the cmdline
|
|
50
|
-
* `-projectPath` argument. If Unity was launched via a symlink, the first
|
|
51
|
-
* lookup misses. We retry against the un-canonicalised form so a symlinked
|
|
52
|
-
* launch path doesn't silently degrade close to a no-op.
|
|
53
|
-
*
|
|
54
|
-
* Returns `null` when no live editor matches the project. Exported for tests.
|
|
55
|
-
*/
|
|
56
|
-
export declare function resolveEditorPid(projectPath: string, platform?: SupportedPlatform): number | null;
|
|
57
|
-
export declare const closeCommand: Command;
|
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import * as fs from 'fs';
|
|
3
|
-
import * as path from 'path';
|
|
4
|
-
import { platform as nodePlatform } from 'os';
|
|
5
|
-
import * as ui from '../utils/ui.js';
|
|
6
|
-
import { verbose } from '../utils/ui.js';
|
|
7
|
-
import { findUnityProcess } from '../utils/unity-process.js';
|
|
8
|
-
import { readLockfilePid, isProcessAlive, sendGracefulShutdown, sendForceKill, waitForExit, } from '../utils/unity-shutdown.js';
|
|
9
|
-
const DEFAULT_TIMEOUT_SECONDS = 30;
|
|
10
|
-
/**
|
|
11
|
-
* Resolve the project path argument to an absolute, canonical path.
|
|
12
|
-
*
|
|
13
|
-
* Mirrors the convention used by `open` / `wait-for-ready` — accepts a
|
|
14
|
-
* positional argument or `process.cwd()` fallback, normalises symlinks where
|
|
15
|
-
* possible, and trims any trailing path separator. Exported for unit tests.
|
|
16
|
-
*/
|
|
17
|
-
export function resolveCloseProjectPath(positionalPath, cwd) {
|
|
18
|
-
const explicit = positionalPath ?? cwd;
|
|
19
|
-
let resolved = path.resolve(explicit);
|
|
20
|
-
// realpathSync collapses symlinks, ".." segments, and trailing separators
|
|
21
|
-
// when the path exists. When it does not, fall through to the resolved
|
|
22
|
-
// form so the caller can produce a "path does not exist" error.
|
|
23
|
-
try {
|
|
24
|
-
resolved = fs.realpathSync(resolved);
|
|
25
|
-
}
|
|
26
|
-
catch {
|
|
27
|
-
// Path may not exist — let the caller decide what to do.
|
|
28
|
-
}
|
|
29
|
-
return resolved;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Returns true when `<projectPath>/ProjectSettings/ProjectVersion.txt` exists.
|
|
33
|
-
*
|
|
34
|
-
* The issue's acceptance criteria require refusing to act on any path that
|
|
35
|
-
* does not look like a Unity project root (`ProjectVersion.txt` is the
|
|
36
|
-
* canonical marker). This is intentionally narrower than the `open`
|
|
37
|
-
* subcommand's check — the goal here is to defend against accidental
|
|
38
|
-
* "kill all Unity processes on host" invocations, so a positive ID of
|
|
39
|
-
* "this is a Unity project" is required.
|
|
40
|
-
*
|
|
41
|
-
* Exported for unit tests.
|
|
42
|
-
*/
|
|
43
|
-
export function isUnityProjectRoot(projectPath) {
|
|
44
|
-
return fs.existsSync(path.join(projectPath, 'ProjectSettings', 'ProjectVersion.txt'));
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Parse a positive-integer `--timeout` value (seconds). Returns the parsed
|
|
48
|
-
* value, or `null` when the input is not a valid positive integer.
|
|
49
|
-
*
|
|
50
|
-
* The `undefined` branch falls back to the default for ergonomic
|
|
51
|
-
* direct-call use (e.g., unit tests). The action handler never reaches it
|
|
52
|
-
* because commander always materialises the configured default string.
|
|
53
|
-
*
|
|
54
|
-
* Exported for unit tests.
|
|
55
|
-
*/
|
|
56
|
-
export function parseTimeoutSeconds(raw) {
|
|
57
|
-
if (raw === undefined)
|
|
58
|
-
return DEFAULT_TIMEOUT_SECONDS;
|
|
59
|
-
const parsed = Number(raw);
|
|
60
|
-
if (!Number.isInteger(parsed) || parsed <= 0)
|
|
61
|
-
return null;
|
|
62
|
-
return parsed;
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Resolve the editor PID for a given project path.
|
|
66
|
-
*
|
|
67
|
-
* Reads `<project>/Temp/UnityLockfile` (4 bytes LE uint32) and enumerates
|
|
68
|
-
* Unity processes by command line, then prefers the lockfile PID when it
|
|
69
|
-
* is alive and matches the enumerated process for this project (handles
|
|
70
|
-
* stale lockfiles); otherwise uses the enumerated PID.
|
|
71
|
-
*
|
|
72
|
-
* Symlink/realpath handling: `resolveCloseProjectPath` canonicalises via
|
|
73
|
-
* `realpathSync` while `findUnityProcess` only `path.resolve`s the cmdline
|
|
74
|
-
* `-projectPath` argument. If Unity was launched via a symlink, the first
|
|
75
|
-
* lookup misses. We retry against the un-canonicalised form so a symlinked
|
|
76
|
-
* launch path doesn't silently degrade close to a no-op.
|
|
77
|
-
*
|
|
78
|
-
* Returns `null` when no live editor matches the project. Exported for tests.
|
|
79
|
-
*/
|
|
80
|
-
export function resolveEditorPid(projectPath, platform = nodePlatform()) {
|
|
81
|
-
const lockPid = readLockfilePid(projectPath);
|
|
82
|
-
// Enumerate Unity processes once. `findUnityProcess` shells out (3s timeout
|
|
83
|
-
// on Windows via PowerShell+CIM, 5s on POSIX via `ps`), so calling it twice
|
|
84
|
-
// on the stale-lockfile path used to roughly double close latency.
|
|
85
|
-
let proc = findUnityProcess(projectPath);
|
|
86
|
-
// Symlink fallback: if the canonical realpath form found no process, retry
|
|
87
|
-
// with `path.resolve` only (no realpath collapse) — that matches what
|
|
88
|
-
// `findUnityProcess` derives from the cmdline `-projectPath` argument.
|
|
89
|
-
if (!proc) {
|
|
90
|
-
const resolvedNoRealpath = path.resolve(projectPath);
|
|
91
|
-
if (resolvedNoRealpath !== projectPath) {
|
|
92
|
-
proc = findUnityProcess(resolvedNoRealpath);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
if (lockPid !== null && isProcessAlive(lockPid, platform)) {
|
|
96
|
-
if (proc && proc.pid === lockPid) {
|
|
97
|
-
verbose(`Lockfile PID ${lockPid} confirmed via process enumeration`);
|
|
98
|
-
return lockPid;
|
|
99
|
-
}
|
|
100
|
-
// Lockfile alive but no matching enumerated process — the lockfile may
|
|
101
|
-
// still be authoritative if the asymmetry is purely realpath/symlink
|
|
102
|
-
// related (process listed under symlink path while we queried by realpath).
|
|
103
|
-
// Trust the live lockfile PID in that case rather than discarding it.
|
|
104
|
-
if (!proc) {
|
|
105
|
-
verbose(`Lockfile PID ${lockPid} alive but no enumerated match — using lockfile PID (likely symlink/path mismatch)`);
|
|
106
|
-
return lockPid;
|
|
107
|
-
}
|
|
108
|
-
verbose(`Lockfile PID ${lockPid} did not match enumerated Unity process for project — treating as stale`);
|
|
109
|
-
}
|
|
110
|
-
return proc ? proc.pid : null;
|
|
111
|
-
}
|
|
112
|
-
export const closeCommand = new Command('close')
|
|
113
|
-
.description('Gracefully terminate the Unity Editor instance running for a given project path')
|
|
114
|
-
.argument('[path]', 'Path to the Unity project (defaults to current directory)')
|
|
115
|
-
.option('--timeout-seconds <seconds>', `Polite-quit timeout in seconds (canonical; default: ${DEFAULT_TIMEOUT_SECONDS})`)
|
|
116
|
-
.option('--timeout <seconds>', 'Deprecated alias for --timeout-seconds; value is seconds', String(DEFAULT_TIMEOUT_SECONDS))
|
|
117
|
-
.option('--force', 'Hard-kill the Editor if it does not exit within --timeout')
|
|
118
|
-
.action(async (positionalPath, options) => {
|
|
119
|
-
const projectPath = resolveCloseProjectPath(positionalPath, process.cwd());
|
|
120
|
-
verbose(`close invoked for project: ${projectPath}`);
|
|
121
|
-
if (!fs.existsSync(projectPath)) {
|
|
122
|
-
ui.error(`Project path does not exist: ${projectPath}`);
|
|
123
|
-
process.exit(1);
|
|
124
|
-
}
|
|
125
|
-
if (!isUnityProjectRoot(projectPath)) {
|
|
126
|
-
ui.error(`Not a Unity project root: ${projectPath}`);
|
|
127
|
-
process.exit(1);
|
|
128
|
-
}
|
|
129
|
-
const timeoutRaw = options.timeoutSeconds ?? options.timeout;
|
|
130
|
-
const timeoutSeconds = parseTimeoutSeconds(timeoutRaw);
|
|
131
|
-
if (timeoutSeconds === null) {
|
|
132
|
-
ui.error(`Invalid timeout value: "${timeoutRaw}". Must be a positive integer (seconds).`);
|
|
133
|
-
process.exit(1);
|
|
134
|
-
}
|
|
135
|
-
const platform = nodePlatform();
|
|
136
|
-
const pid = resolveEditorPid(projectPath, platform);
|
|
137
|
-
if (pid === null) {
|
|
138
|
-
ui.success(`no running Editor for project at ${projectPath}`);
|
|
139
|
-
process.exit(0);
|
|
140
|
-
}
|
|
141
|
-
ui.heading('Closing Unity Editor');
|
|
142
|
-
ui.label('Project', projectPath);
|
|
143
|
-
ui.label('PID', String(pid));
|
|
144
|
-
ui.label('Timeout', `${timeoutSeconds}s`);
|
|
145
|
-
ui.label('Force', options.force ? 'yes' : 'no');
|
|
146
|
-
ui.divider();
|
|
147
|
-
// TOCTOU window: between resolveEditorPid returning and the signal call
|
|
148
|
-
// below, the original Unity process could exit and the OS could reuse
|
|
149
|
-
// the same numeric PID for an unrelated process (more likely on POSIX,
|
|
150
|
-
// where PIDs cycle aggressively). We accept the residual risk — the
|
|
151
|
-
// lockfile cross-check above already narrows it, holding a lock across
|
|
152
|
-
// a spawned Editor's lifetime is impractical, and the signals we send
|
|
153
|
-
// (SIGTERM / WM_CLOSE) are best-effort, not destructive.
|
|
154
|
-
const spinner = ui.startSpinner(`Sending polite-quit to PID ${pid}...`);
|
|
155
|
-
const sent = sendGracefulShutdown(pid, platform);
|
|
156
|
-
if (!sent) {
|
|
157
|
-
spinner.error(`Failed to deliver polite-quit signal to PID ${pid}`);
|
|
158
|
-
process.exit(1);
|
|
159
|
-
}
|
|
160
|
-
spinner.text = `Waiting up to ${timeoutSeconds}s for PID ${pid} to exit...`;
|
|
161
|
-
const timeoutMs = timeoutSeconds * 1000;
|
|
162
|
-
const exited = await waitForExit(pid, timeoutMs, platform);
|
|
163
|
-
if (exited) {
|
|
164
|
-
spinner.success(`Unity Editor (PID ${pid}) exited cleanly`);
|
|
165
|
-
process.exit(0);
|
|
166
|
-
}
|
|
167
|
-
if (!options.force) {
|
|
168
|
-
spinner.error(`Unity Editor (PID ${pid}) did not exit within ${timeoutSeconds}s. ` +
|
|
169
|
-
`Re-run with --force to hard-kill, or close it manually.`);
|
|
170
|
-
process.exit(1);
|
|
171
|
-
}
|
|
172
|
-
spinner.text = `Force-killing PID ${pid}...`;
|
|
173
|
-
const killed = sendForceKill(pid, platform);
|
|
174
|
-
if (!killed) {
|
|
175
|
-
spinner.error(`Failed to force-kill PID ${pid}`);
|
|
176
|
-
process.exit(1);
|
|
177
|
-
}
|
|
178
|
-
// Brief secondary wait so we report a true terminal state — the OS may
|
|
179
|
-
// need a moment to reap the process even after SIGKILL / `taskkill /F`.
|
|
180
|
-
const reaped = await waitForExit(pid, 5000, platform);
|
|
181
|
-
if (reaped) {
|
|
182
|
-
spinner.success(`Unity Editor (PID ${pid}) force-killed`);
|
|
183
|
-
process.exit(0);
|
|
184
|
-
}
|
|
185
|
-
spinner.error(`Unity Editor (PID ${pid}) is still alive after force-kill`);
|
|
186
|
-
process.exit(1);
|
|
187
|
-
});
|
|
188
|
-
//# sourceMappingURL=close.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"close.js","sourceRoot":"","sources":["../../../src/devops/commands-upstream/close.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import * as path from 'path';
|
|
3
|
-
import * as ui from '../utils/ui.js';
|
|
4
|
-
import { verbose } from '../utils/ui.js';
|
|
5
|
-
import { configure } from '../lib/configure.js';
|
|
6
|
-
function parseCommaSeparated(value) {
|
|
7
|
-
return value.split(',').map((s) => s.trim()).filter(Boolean);
|
|
8
|
-
}
|
|
9
|
-
function buildAction(enable, disable, enableAll, disableAll) {
|
|
10
|
-
if (!enable && !disable && !enableAll && !disableAll)
|
|
11
|
-
return undefined;
|
|
12
|
-
return {
|
|
13
|
-
enableNames: enable,
|
|
14
|
-
disableNames: disable,
|
|
15
|
-
enableAll,
|
|
16
|
-
disableAll,
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
export const configureCommand = new Command('configure')
|
|
20
|
-
.description('Configure MCP tools, prompts, and resources in uco-config.json')
|
|
21
|
-
.argument('[path]', 'Path to the Unity project')
|
|
22
|
-
.option('--path <path>', 'Path to the Unity project')
|
|
23
|
-
.option('--enable-tools <names>', 'Enable specific tools (comma-separated)', parseCommaSeparated)
|
|
24
|
-
.option('--disable-tools <names>', 'Disable specific tools (comma-separated)', parseCommaSeparated)
|
|
25
|
-
.option('--enable-all-tools', 'Enable all tools')
|
|
26
|
-
.option('--disable-all-tools', 'Disable all tools')
|
|
27
|
-
.option('--enable-prompts <names>', 'Enable specific prompts (comma-separated)', parseCommaSeparated)
|
|
28
|
-
.option('--disable-prompts <names>', 'Disable specific prompts (comma-separated)', parseCommaSeparated)
|
|
29
|
-
.option('--enable-all-prompts', 'Enable all prompts')
|
|
30
|
-
.option('--disable-all-prompts', 'Disable all prompts')
|
|
31
|
-
.option('--enable-resources <names>', 'Enable specific resources (comma-separated)', parseCommaSeparated)
|
|
32
|
-
.option('--disable-resources <names>', 'Disable specific resources (comma-separated)', parseCommaSeparated)
|
|
33
|
-
.option('--enable-all-resources', 'Enable all resources')
|
|
34
|
-
.option('--disable-all-resources', 'Disable all resources')
|
|
35
|
-
.option('--list', 'List current configuration')
|
|
36
|
-
.action(async (positionalPath, options) => {
|
|
37
|
-
const resolvedPath = positionalPath ?? options.path;
|
|
38
|
-
if (!resolvedPath) {
|
|
39
|
-
ui.error('Path is required. Usage: unity-mcp-cli configure <path> or --path <path>');
|
|
40
|
-
process.exit(1);
|
|
41
|
-
}
|
|
42
|
-
const projectPath = path.resolve(resolvedPath);
|
|
43
|
-
verbose(`Loading config for project: ${projectPath}`);
|
|
44
|
-
// `--list` must be read-only: previously this command short-
|
|
45
|
-
// circuited before applying any enable/disable flags. Preserve
|
|
46
|
-
// that semantics by suppressing the mutating actions whenever
|
|
47
|
-
// `options.list` is set, regardless of other flags.
|
|
48
|
-
const toolsAction = buildAction(options.enableTools, options.disableTools, options.enableAllTools, options.disableAllTools);
|
|
49
|
-
const promptsAction = buildAction(options.enablePrompts, options.disablePrompts, options.enableAllPrompts, options.disableAllPrompts);
|
|
50
|
-
const resourcesAction = buildAction(options.enableResources, options.disableResources, options.enableAllResources, options.disableAllResources);
|
|
51
|
-
const result = await configure({
|
|
52
|
-
unityProjectPath: projectPath,
|
|
53
|
-
tools: options.list ? undefined : toolsAction,
|
|
54
|
-
prompts: options.list ? undefined : promptsAction,
|
|
55
|
-
resources: options.list ? undefined : resourcesAction,
|
|
56
|
-
});
|
|
57
|
-
if (result.kind === 'failure') {
|
|
58
|
-
ui.error(result.error.message);
|
|
59
|
-
process.exit(1);
|
|
60
|
-
}
|
|
61
|
-
// Narrowed: result.kind === 'success' below — `snapshot` is
|
|
62
|
-
// non-optional.
|
|
63
|
-
if (options.list) {
|
|
64
|
-
ui.heading('Current configuration');
|
|
65
|
-
ui.label('Host', result.snapshot.host ?? 'not set');
|
|
66
|
-
ui.label('Keep Connected', String(result.snapshot.keepConnected ?? false));
|
|
67
|
-
ui.label('Transport', result.snapshot.transportMethod ?? 'streamableHttp');
|
|
68
|
-
ui.label('Auth', result.snapshot.authOption ?? 'none');
|
|
69
|
-
const printFeatures = (featureLabel, features) => {
|
|
70
|
-
ui.heading(featureLabel);
|
|
71
|
-
if (features.length === 0) {
|
|
72
|
-
ui.info('(none configured - all enabled by default)');
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
for (const f of features) {
|
|
76
|
-
ui.featureRow(f.name, f.enabled);
|
|
77
|
-
}
|
|
78
|
-
};
|
|
79
|
-
printFeatures('Tools', result.snapshot.tools);
|
|
80
|
-
printFeatures('Prompts', result.snapshot.prompts);
|
|
81
|
-
printFeatures('Resources', result.snapshot.resources);
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
verbose('Writing updated configuration');
|
|
85
|
-
ui.success('Configuration updated successfully.');
|
|
86
|
-
});
|
|
87
|
-
//# sourceMappingURL=configure.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"configure.js","sourceRoot":"","sources":["../../../src/devops/commands-upstream/configure.ts"],"names":[],"mappings":"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"}
|