@atelierai/uco 1.0.1 → 1.0.3
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 +25 -1
- package/README.md +3 -3
- package/dist/codegen/emit.js +1 -1
- package/dist/codegen/fetch.js +1 -1
- package/dist/codegen/fetch.js.map +1 -1
- package/dist/commands/devops/login.js +1 -1
- package/dist/commands/devops/login.js.map +1 -1
- package/dist/commands/devops/setup-mcp.js +1 -1
- package/dist/commands/devops/setup-mcp.js.map +1 -1
- package/dist/commands/gen.js +2 -2
- package/dist/commands/gen.js.map +1 -1
- package/dist/commands/init.js +31 -10
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/ping.js +2 -2
- package/dist/commands/ping.js.map +1 -1
- package/dist/config/resolve.js +1 -1
- package/dist/config/resolve.js.map +1 -1
- package/dist/devops/utils/agents.js +1 -1
- package/dist/devops/utils/agents.js.map +1 -1
- package/dist/generated/tools.js +1 -1
- package/dist/generated/tools.js.map +1 -1
- package/docs/INSTALL.zh-CN.md +1 -1
- package/package.json +13 -4
- package/skills/uco-setup/SKILL.md +2 -2
- package/skills/uco-setup/references/recovery.md +26 -2
- package/skills/unity-editor/SKILL.md +1 -1
- package/vendor/plugin/com.atelierai.unity.copilot/CHANGELOG.md +48 -15
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/DependencyResolver/NuGetResolverMenu.cs +3 -1
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Branding/ProductInfo.cs +4 -5
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/CopilotServerManager.cs +32 -42
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Skills/Skill_InitialSetup.cs +1 -1
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/MenuItems.cs +7 -66
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Overlay/OpenWindowButton.cs +2 -2
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/UnityCopilotProjectSettingsProvider.cs +5 -5
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/MainWindowEditor.Connection.cs +177 -409
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/MainWindowEditor.CreateGUI.cs +3 -10
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/MainWindowEditor.cs +2 -71
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/UpdatePopupWindow.cs +2 -2
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UnityCopilotPluginEditor.Config.cs +6 -1
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UnityCopilotPluginEditor.Static.cs +9 -12
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UnityCopilotPluginEditor.cs +1 -1
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/ToolsManifestGenerator.cs +1 -1
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/UnityCopilotUpdateProjectSettings.cs +2 -2
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/UpdateChecker.cs +3 -3
- package/vendor/plugin/com.atelierai.unity.copilot/README.md +2 -2
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/UnityCopilotPlugin.Config.cs +11 -62
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/UnityCopilotPlugin.cs +1 -1
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/Utils/EnvironmentUtils.cs +7 -25
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Environment/EnvironmentUtilsTests.cs +260 -320
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Tool/ToolSetEnabledStateTests.cs +1 -1
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/UI/MainWindowEditor.StatusLogicTests.cs +0 -125
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/UI/SceneViewToolbarOverlayTests.cs +1 -1
- package/vendor/plugin/com.atelierai.unity.copilot/package.json +3 -3
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Services/DeviceAuthFlow.cs +0 -133
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Services/DeviceAuthFlow.cs.meta +0 -11
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/CopilotServerManagerAutoStartTests.cs +0 -43
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/CopilotServerManagerAutoStartTests.cs.meta +0 -11
package/docs/INSTALL.zh-CN.md
CHANGED
|
@@ -58,7 +58,7 @@ uco --help
|
|
|
58
58
|
```bash
|
|
59
59
|
uco init # 把三个 uco Skills 装进 ./.claude/skills(Claude Code)
|
|
60
60
|
# uco init <目录> # 指定别的工作目录
|
|
61
|
-
# uco init --agent codex # 用别的助手的 skills
|
|
61
|
+
# uco init --agent codex # 用别的助手的 skills 目录(codex 为 .codex/skills)
|
|
62
62
|
# uco init --agent claude-code,cursor # 一次给多个助手安装
|
|
63
63
|
# uco init --list # 查看所有支持的助手(含检测路径)
|
|
64
64
|
```
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atelierai/uco",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "uco — Unity
|
|
3
|
+
"version": "1.0.3",
|
|
4
|
+
"description": "uco — Unity Copilot CLI. Drive Unity Editor (and runtime game builds) from any AI agent via plain HTTP. No MCP protocol on the wire.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"uco": "./bin/uco.mjs",
|
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
"LICENSE"
|
|
41
41
|
],
|
|
42
42
|
"dependencies": {
|
|
43
|
+
"@inquirer/prompts": "^8.7.2",
|
|
43
44
|
"chalk": "^5.6.2",
|
|
44
45
|
"commander": "^12.1.0",
|
|
45
46
|
"kleur": "^4.1.5",
|
|
@@ -51,7 +52,8 @@
|
|
|
51
52
|
"commander",
|
|
52
53
|
"kleur",
|
|
53
54
|
"ws",
|
|
54
|
-
"yocto-spinner"
|
|
55
|
+
"yocto-spinner",
|
|
56
|
+
"@inquirer/prompts"
|
|
55
57
|
],
|
|
56
58
|
"devDependencies": {
|
|
57
59
|
"@types/node": "^20.14.0",
|
|
@@ -79,5 +81,12 @@
|
|
|
79
81
|
"bugs": "https://github.com/DumoeDss/uco/issues",
|
|
80
82
|
"publishConfig": {
|
|
81
83
|
"access": "public"
|
|
82
|
-
}
|
|
84
|
+
},
|
|
85
|
+
"bundleDependencies": [
|
|
86
|
+
"chalk",
|
|
87
|
+
"commander",
|
|
88
|
+
"kleur",
|
|
89
|
+
"ws",
|
|
90
|
+
"yocto-spinner"
|
|
91
|
+
]
|
|
83
92
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: uco-setup
|
|
3
|
-
description: Bootstrap or repair uco integration in a Unity project. Use for Unity
|
|
3
|
+
description: Bootstrap or repair uco integration in a Unity project. Use for Unity Copilot plugin installation or updates, NuGet/config staging, agent Skill generation or migration, project wrapper repair, and bridge readiness failures. Not for routine Editor changes or official Unity lifecycle commands.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# uco setup
|
|
@@ -23,7 +23,7 @@ uco install-plugin <project> --dry-run
|
|
|
23
23
|
uco install <project> --dry-run
|
|
24
24
|
```
|
|
25
25
|
|
|
26
|
-
3. Install the Unity
|
|
26
|
+
3. Install the Unity Copilot package alone with `install-plugin`, or use `install` when NuGet and configuration staging are also required.
|
|
27
27
|
4. Open the project and wait for package resolution/compilation.
|
|
28
28
|
5. Require runtime readiness before reading the live catalog:
|
|
29
29
|
|
|
@@ -2,12 +2,36 @@
|
|
|
2
2
|
|
|
3
3
|
Read this only after the bootstrap happy path fails.
|
|
4
4
|
|
|
5
|
+
## Bridge not running (`uco ping` fails / connection refused)
|
|
6
|
+
|
|
7
|
+
The bridge is a plain Node process (`bin/server.mjs` from the `@atelierai/uco`
|
|
8
|
+
npm package) listening on a per-project deterministic port. Bring it up in any
|
|
9
|
+
of these ways:
|
|
10
|
+
|
|
11
|
+
- `uco open <project> --start-server true` — the CLI starts a uco-owned bridge
|
|
12
|
+
before Unity launches.
|
|
13
|
+
- Open the Unity Editor: the plugin auto-starts the bridge in Custom mode when
|
|
14
|
+
`keepServerRunning` is true (the default) — discovery looks for the
|
|
15
|
+
`@atelierai/uco` package (project `node_modules` first, then the npm global).
|
|
16
|
+
- Start it manually with the exact same arguments the plugin would use:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
node <npm-global>/node_modules/@atelierai/uco/bin/server.mjs \
|
|
20
|
+
--port <port> --authorization required --token <token from UserSettings/uco-config.json>
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
The plugin detects an already-running server on its port and connects to it.
|
|
24
|
+
|
|
25
|
+
If the plugin still refuses to start it: `nodeServerPath` in
|
|
26
|
+
`UserSettings/uco-config.json` may point at a dead path (it must exist or be
|
|
27
|
+
cleared), or the npm package is missing (`npm i -g @atelierai/uco`).
|
|
28
|
+
|
|
5
29
|
## Diagnose by layer
|
|
6
30
|
|
|
7
31
|
1. Verify `Packages/manifest.json` contains `com.atelierai.unity.copilot` and inspect its source/version without rewriting unrelated dependencies.
|
|
8
32
|
2. Check the OpenUPM scopes required by the package and preserve an active local package source.
|
|
9
|
-
3. Check
|
|
10
|
-
4. Check `UserSettings/
|
|
33
|
+
3. Check `Assets/Plugins/NuGet` is present when using full `uco install`. (No server directory is staged — the Unity plugin launches its Node server itself.)
|
|
34
|
+
4. Check `UserSettings/uco-config.json` exists, but never print its token.
|
|
11
35
|
5. Confirm the expected Unity Editor process owns this exact project before diagnosing REST readiness.
|
|
12
36
|
6. Use `uco status`, then `open` plus `wait-for-ready`; only then run `ping` and `instance-get-current`.
|
|
13
37
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: unity-editor
|
|
3
|
-
description: Inspect or change a running Unity Editor through uco tools. Use for scenes, GameObjects, components, assets, scripts, packages, UI, graphics, physics, screenshots, console, profiler, live build jobs, or in-Editor tests. Requires a ready Unity
|
|
3
|
+
description: Inspect or change a running Unity Editor through uco tools. Use for scenes, GameObjects, components, assets, scripts, packages, UI, graphics, physics, screenshots, console, profiler, live build jobs, or in-Editor tests. Requires a ready Unity Copilot project bridge.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Running Unity Editor
|
|
@@ -1,5 +1,38 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.0.3] - 2026-09-17 — Cloud mode removed; bridge finds the published npm package
|
|
4
|
+
|
|
5
|
+
- **Cloud connection mode deleted.** The upstream remnant connected to a dead
|
|
6
|
+
third-party endpoint (ai-game.dev), silently prevented the local bridge from
|
|
7
|
+
auto-starting (its gate only allowed Custom), and confused every session that
|
|
8
|
+
hit a config without an explicit mode. ConnectionMode now has a single value
|
|
9
|
+
(Custom), the default is Custom, the device-code auth flow and its UI are
|
|
10
|
+
gone, and old configs carrying "Cloud" are mapped to Custom on load.
|
|
11
|
+
- **Node bridge discovery follows the published package.** npm rejected the
|
|
12
|
+
bare name "uco" (typosquatting policy), so the package publishes as
|
|
13
|
+
@atelierai/uco — but discovery still looked for node_modules/uco, which
|
|
14
|
+
stopped existing the moment the pre-scope global install was removed.
|
|
15
|
+
Discovery now probes @atelierai/uco, then the legacy uco and cocli layouts,
|
|
16
|
+
project-local and npm-global.
|
|
17
|
+
- Token env overrides route straight to the local token (no mode routing);
|
|
18
|
+
UNITY_MCP_CLOUD_URL is gone, --url/UNITY_MCP_HOST keep working.
|
|
19
|
+
|
|
20
|
+
## [1.0.2] - 2026-09-15 — one menu tree, one name: Unity Copilot
|
|
21
|
+
|
|
22
|
+
- The product is named **Unity Copilot** (no hyphen). All menus, window
|
|
23
|
+
titles, the Project Settings page, the scene-view overlay button, and
|
|
24
|
+
generated skill docs now read from the single `ProductInfo` source.
|
|
25
|
+
- The leftover "AI Game Developer" menu tree (NuGet resolver items) is
|
|
26
|
+
merged into **Tools ▸ Unity Copilot**; the stray root-level
|
|
27
|
+
"Generate Tools Manifest" item moves under it too.
|
|
28
|
+
- Removed the dead **Launch MCP Inspector** item and the legacy
|
|
29
|
+
`Commands/` folder (`start_mcp_inspector.bat`, `copy_readme.bat`) — the
|
|
30
|
+
bridge speaks plain REST, there is no MCP endpoint to inspect.
|
|
31
|
+
- Team update kill-switch asset renamed to
|
|
32
|
+
`ProjectSettings/Copilot-UpdateSettings.asset` (the old
|
|
33
|
+
AI-Game-Developer-named file is no longer read; the toggle resets to
|
|
34
|
+
enabled once).
|
|
35
|
+
|
|
3
36
|
## [1.0.1] - 2026-09-15 — self-contained package (framework DLLs move inside)
|
|
4
37
|
|
|
5
38
|
The three locally-built framework DLLs (ReflectorNet.dll, Uco.Framework.dll,
|
|
@@ -13,18 +46,18 @@ packages) on first import, and the framework trio travels with the package.
|
|
|
13
46
|
on upgrade — duplicates would collide with the embedded assemblies.
|
|
14
47
|
`build-framework-dlls` now deploys into the package.
|
|
15
48
|
|
|
16
|
-
|
|
17
|
-
## [1.0.0] - 2026-09-14 — first public release
|
|
18
|
-
|
|
19
|
-
Inaugural version under the `com.atelierai.unity.copilot` identity. The
|
|
20
|
-
0.7x line was the private fork era; the version counter restarts here with
|
|
21
|
-
the public repository.
|
|
22
|
-
|
|
23
|
-
### Fixed
|
|
24
|
-
|
|
25
|
-
- Node server auto-discovery now looks for the `uco` npm package (the
|
|
26
|
-
package was renamed cocli -> uco in 0.76.0, but discovery still looked
|
|
27
|
-
only for `node_modules/cocli`, which on machines with a pre-rename global
|
|
28
|
-
install resolved to stale 0.2.x server code — or to nothing at all on
|
|
29
|
-
clean machines). An explicit `nodeServerPath` in the plugin config still
|
|
30
|
-
wins over auto-discovery.
|
|
49
|
+
|
|
50
|
+
## [1.0.0] - 2026-09-14 — first public release
|
|
51
|
+
|
|
52
|
+
Inaugural version under the `com.atelierai.unity.copilot` identity. The
|
|
53
|
+
0.7x line was the private fork era; the version counter restarts here with
|
|
54
|
+
the public repository.
|
|
55
|
+
|
|
56
|
+
### Fixed
|
|
57
|
+
|
|
58
|
+
- Node server auto-discovery now looks for the `uco` npm package (the
|
|
59
|
+
package was renamed cocli -> uco in 0.76.0, but discovery still looked
|
|
60
|
+
only for `node_modules/cocli`, which on machines with a pre-rename global
|
|
61
|
+
install resolved to stale 0.2.x server code — or to nothing at all on
|
|
62
|
+
clean machines). An explicit `nodeServerPath` in the plugin config still
|
|
63
|
+
wins over auto-discovery.
|
package/vendor/plugin/com.atelierai.unity.copilot/Editor/DependencyResolver/NuGetResolverMenu.cs
CHANGED
|
@@ -25,7 +25,9 @@ namespace com.AtelierAI.Unity.Copilot.Editor.DependencyResolver
|
|
|
25
25
|
static class NuGetResolverMenu
|
|
26
26
|
{
|
|
27
27
|
const string Tag = NuGetConfig.LogTag;
|
|
28
|
-
|
|
28
|
+
// Literal, not ProductInfo: the resolver is the bootstrap assembly and must
|
|
29
|
+
// not reference the main Editor assembly (circular dependency).
|
|
30
|
+
const string MenuPath = "Tools/Unity Copilot/Dependencies/Force Resolve NuGet DLLs";
|
|
29
31
|
|
|
30
32
|
[MenuItem(MenuPath, priority = 1050)]
|
|
31
33
|
public static void ForceResolve()
|
|
@@ -21,8 +21,7 @@ namespace com.AtelierAI.Unity.Copilot.Editor.Branding
|
|
|
21
21
|
public static class ProductInfo
|
|
22
22
|
{
|
|
23
23
|
public const string ProductName = "Unity Copilot";
|
|
24
|
-
public const string
|
|
25
|
-
public const string ProductLong = ParentBrand + " — " + ProductName;
|
|
24
|
+
public const string ProductLong = ProductName;
|
|
26
25
|
|
|
27
26
|
// Stable package id used for EditorPrefs key namespacing. Decoupled from the UPM
|
|
28
27
|
// package name on disk so a UPM rename doesn't silently wipe per-user state — the
|
|
@@ -32,7 +31,7 @@ namespace com.AtelierAI.Unity.Copilot.Editor.Branding
|
|
|
32
31
|
|
|
33
32
|
// Menu item paths (passed to Unity's [MenuItem] attribute).
|
|
34
33
|
public const string MainWindowMenu = "Window/" + ProductLong + " %&a";
|
|
35
|
-
public const string ToolsMenuRoot = "Tools/" +
|
|
34
|
+
public const string ToolsMenuRoot = "Tools/" + ProductName;
|
|
36
35
|
public const string ServerMenuRoot = ToolsMenuRoot + "/Server";
|
|
37
36
|
|
|
38
37
|
// EditorWindow titleContent / GetWindow titles.
|
|
@@ -52,8 +51,8 @@ namespace com.AtelierAI.Unity.Copilot.Editor.Branding
|
|
|
52
51
|
// status directly in the Editor console.)
|
|
53
52
|
|
|
54
53
|
// Project Settings provider — path users see under Edit > Project Settings.
|
|
55
|
-
public const string SettingsPath = "Project/" +
|
|
56
|
-
public const string SettingsKeywords = "
|
|
54
|
+
public const string SettingsPath = "Project/" + ProductName;
|
|
55
|
+
public const string SettingsKeywords = "Copilot Unity uco";
|
|
57
56
|
|
|
58
57
|
// SessionState / EditorPrefs key prefixes for transient + persistent state.
|
|
59
58
|
// The hash suffix is appended by callers using Application.dataPath FNV-1a.
|
|
@@ -85,12 +85,15 @@ namespace com.AtelierAI.Unity.Copilot.Editor
|
|
|
85
85
|
#region Node Server Discovery
|
|
86
86
|
|
|
87
87
|
/// <summary>
|
|
88
|
-
///
|
|
88
|
+
/// npm package directories that ship the Node.js server, newest first: the
|
|
89
|
+
/// published scoped package (@atelierai/uco — the registry rejected the bare
|
|
90
|
+
/// short name), the pre-scope local layout, and the deprecated cocli install
|
|
91
|
+
/// from the private era.
|
|
89
92
|
/// </summary>
|
|
90
|
-
public
|
|
93
|
+
public static readonly string[] NodeServerPackageNames = { "@atelierai/uco", "uco", "cocli" };
|
|
91
94
|
|
|
92
95
|
/// <summary>
|
|
93
|
-
/// Path of the server entry script inside
|
|
96
|
+
/// Path of the server entry script inside a <see cref="NodeServerPackageNames"/> package.
|
|
94
97
|
/// </summary>
|
|
95
98
|
public const string NodeServerEntryRelativePath = "bin/server.mjs";
|
|
96
99
|
|
|
@@ -124,28 +127,33 @@ namespace com.AtelierAI.Unity.Copilot.Editor
|
|
|
124
127
|
return null;
|
|
125
128
|
}
|
|
126
129
|
|
|
127
|
-
// 2) Installed in the Unity project (uco first, legacy
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
130
|
+
// 2) Installed in the Unity project (@atelierai/uco first, legacy names after)
|
|
131
|
+
foreach (var packageName in NodeServerPackageNames)
|
|
132
|
+
{
|
|
133
|
+
var projectLocal = Path.GetFullPath(Path.Combine(
|
|
134
|
+
UnityCopilotPluginEditor.ProjectRootPath,
|
|
135
|
+
"node_modules",
|
|
136
|
+
packageName,
|
|
137
|
+
NodeServerEntryRelativePath));
|
|
138
|
+
if (File.Exists(projectLocal))
|
|
139
|
+
return projectLocal;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// 3) Installed globally via npm (@atelierai/uco first, legacy names after)
|
|
138
143
|
foreach (var globalRoot in GetNpmGlobalRoots())
|
|
139
144
|
{
|
|
140
|
-
|
|
141
|
-
{
|
|
142
|
-
var globalPath = Path.Combine(globalRoot, NodeServerPackageName, NodeServerEntryRelativePath);
|
|
143
|
-
if (File.Exists(globalPath))
|
|
144
|
-
return Path.GetFullPath(globalPath);
|
|
145
|
-
}
|
|
146
|
-
catch
|
|
145
|
+
foreach (var packageName in NodeServerPackageNames)
|
|
147
146
|
{
|
|
148
|
-
|
|
147
|
+
try
|
|
148
|
+
{
|
|
149
|
+
var globalPath = Path.Combine(globalRoot, packageName, NodeServerEntryRelativePath);
|
|
150
|
+
if (File.Exists(globalPath))
|
|
151
|
+
return Path.GetFullPath(globalPath);
|
|
152
|
+
}
|
|
153
|
+
catch
|
|
154
|
+
{
|
|
155
|
+
// Inaccessible candidate — skip it.
|
|
156
|
+
}
|
|
149
157
|
}
|
|
150
158
|
}
|
|
151
159
|
|
|
@@ -249,7 +257,7 @@ namespace com.AtelierAI.Unity.Copilot.Editor
|
|
|
249
257
|
// documented project-local install location so the generated config is
|
|
250
258
|
// still a valid, copy-pasteable starting point.
|
|
251
259
|
var serverEntry = ResolveNodeServerEntry()
|
|
252
|
-
?? Path.Combine("node_modules",
|
|
260
|
+
?? Path.Combine("node_modules", NodeServerPackageNames[0], NodeServerEntryRelativePath);
|
|
253
261
|
|
|
254
262
|
serverConfig["command"] = ResolveNodeExecutable().Replace('\\', '/');
|
|
255
263
|
|
|
@@ -381,7 +389,7 @@ namespace com.AtelierAI.Unity.Copilot.Editor
|
|
|
381
389
|
// The server runs as a "node" process, and PIDs get reused, so also
|
|
382
390
|
// verify the process still owns this project's port before
|
|
383
391
|
// re-attaching — otherwise we might adopt an unrelated node process
|
|
384
|
-
// (
|
|
392
|
+
// (dev server, ...) that recycled our PID.
|
|
385
393
|
if (processName.Contains(NodeProcessName) &&
|
|
386
394
|
GetPidListeningOnPort(UnityCopilotPluginEditor.Port) == savedPid)
|
|
387
395
|
{
|
|
@@ -951,17 +959,6 @@ namespace com.AtelierAI.Unity.Copilot.Editor
|
|
|
951
959
|
}
|
|
952
960
|
}
|
|
953
961
|
|
|
954
|
-
/// <summary>
|
|
955
|
-
/// Returns true when the local server may be auto-started for the given connection mode.
|
|
956
|
-
/// Only Custom mode targets the local server, so auto-start is allowed there (subject to
|
|
957
|
-
/// other gates such as <see cref="UnityCopilotPluginEditor.KeepServerRunning"/>). Every other
|
|
958
|
-
/// mode (Cloud today, plus any future addition) connects to a remote endpoint and must
|
|
959
|
-
/// never auto-start the local server on Editor launch or after a binary update.
|
|
960
|
-
/// Pure (no Unity API access) so it can be unit-tested in EditMode.
|
|
961
|
-
/// </summary>
|
|
962
|
-
public static bool IsAutoStartAllowedForMode(ConnectionMode mode)
|
|
963
|
-
=> mode == ConnectionMode.Custom;
|
|
964
|
-
|
|
965
962
|
/// <summary>
|
|
966
963
|
/// Starts the server if KeepServerRunning is enabled and no external server is detected.
|
|
967
964
|
/// This method is called during Unity Editor startup to auto-start the server based on user preference.
|
|
@@ -971,13 +968,6 @@ namespace com.AtelierAI.Unity.Copilot.Editor
|
|
|
971
968
|
{
|
|
972
969
|
EditorApplication.update -= StartServerIfNeeded;
|
|
973
970
|
|
|
974
|
-
// Skip local server auto-start in Cloud mode — Unity connects to the cloud server instead
|
|
975
|
-
if (!IsAutoStartAllowedForMode(UnityCopilotPluginEditor.ConnectionMode))
|
|
976
|
-
{
|
|
977
|
-
_logger.LogDebug("StartServerIfNeeded: Cloud mode active, skipping local server auto-start");
|
|
978
|
-
return;
|
|
979
|
-
}
|
|
980
|
-
|
|
981
971
|
// Check if user wants the server to keep running
|
|
982
972
|
if (!UnityCopilotPluginEditor.KeepServerRunning)
|
|
983
973
|
{
|
package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Skills/Skill_InitialSetup.cs
CHANGED
|
@@ -31,7 +31,7 @@ and basic configurations.")]
|
|
|
31
31
|
var globalInstallNote = GetGlobalInstallNote();
|
|
32
32
|
|
|
33
33
|
return $@"
|
|
34
|
-
#
|
|
34
|
+
# Unity Copilot — Initial Setup
|
|
35
35
|
|
|
36
36
|
This guide walks through installing the `unity-mcp-cli` command-line tool and using it to set
|
|
37
37
|
up a Unity project with AI Skills and MCP integration.
|
|
@@ -22,14 +22,14 @@ namespace com.AtelierAI.Unity.Copilot.Editor.UI
|
|
|
22
22
|
[MenuItem(ProductInfo.MainWindowMenu, priority = 1006)]
|
|
23
23
|
public static void ShowWindow() => MainWindowEditor.ShowWindow();
|
|
24
24
|
|
|
25
|
-
[MenuItem("
|
|
25
|
+
[MenuItem(ProductInfo.ToolsMenuRoot + "/Updates/Check for Updates", priority = 999)]
|
|
26
26
|
public static void CheckForUpdates() => _ = UpdateChecker.CheckForUpdatesAsync(forceCheck: true);
|
|
27
27
|
|
|
28
28
|
// Team-shared kill-switch for the update popup. Toggling this writes through to
|
|
29
|
-
// ProjectSettings/
|
|
29
|
+
// ProjectSettings/Copilot-UpdateSettings.asset (intended to be committed
|
|
30
30
|
// to VCS). The validate method renders the menu's check-mark to match current state.
|
|
31
31
|
// See https://github.com/IvanMurzak/uco-plugin/issues/768.
|
|
32
|
-
private const string DisableUpdatesMenu = "
|
|
32
|
+
private const string DisableUpdatesMenu = ProductInfo.ToolsMenuRoot + "/Updates/Disable Update Notifications (Team)";
|
|
33
33
|
|
|
34
34
|
[MenuItem(DisableUpdatesMenu, priority = 1000)]
|
|
35
35
|
public static void ToggleDisableUpdatesForTeam()
|
|
@@ -48,79 +48,20 @@ namespace com.AtelierAI.Unity.Copilot.Editor.UI
|
|
|
48
48
|
// (cocli) launched directly by CopilotServerManager; its stdout/stderr is
|
|
49
49
|
// surfaced in the Editor console.
|
|
50
50
|
|
|
51
|
-
[MenuItem("
|
|
52
|
-
public static void LaunchMcpInspector()
|
|
53
|
-
{
|
|
54
|
-
// Run command in a terminal window: npx @modelcontextprotocol/inspector http://localhost:8080 --transport http
|
|
55
|
-
var npxArgs = $"-y @modelcontextprotocol/inspector {UnityCopilotPluginEditor.Host} --transport http";
|
|
56
|
-
Debug.Log($"Launching MCP Inspector with command: npx {npxArgs}");
|
|
57
|
-
|
|
58
|
-
var processInfo = new System.Diagnostics.ProcessStartInfo
|
|
59
|
-
{
|
|
60
|
-
FileName = "npx",
|
|
61
|
-
Arguments = npxArgs,
|
|
62
|
-
UseShellExecute = true,
|
|
63
|
-
CreateNoWindow = false,
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
try
|
|
67
|
-
{
|
|
68
|
-
System.Diagnostics.Process.Start(processInfo);
|
|
69
|
-
}
|
|
70
|
-
catch (System.ComponentModel.Win32Exception ex)
|
|
71
|
-
{
|
|
72
|
-
var command = $"{processInfo.FileName} {processInfo.Arguments}";
|
|
73
|
-
NotificationPopupWindow.Show(
|
|
74
|
-
windowTitle: "Launch Failed",
|
|
75
|
-
title: "Unable to start MCP Inspector",
|
|
76
|
-
message:
|
|
77
|
-
"The MCP Inspector could not be started from Unity.\n\n" +
|
|
78
|
-
"This usually means that Node.js (and npx) is not installed, or 'npx' is not available on your PATH.\n\n" +
|
|
79
|
-
"Prerequisites:\n" +
|
|
80
|
-
" - Install Node.js (which includes npx)\n" +
|
|
81
|
-
" - Ensure 'npx' is available from your terminal/command prompt\n\n" +
|
|
82
|
-
"You can try running the following command manually in a terminal:\n" +
|
|
83
|
-
command + "\n\n" +
|
|
84
|
-
"System error:\n" +
|
|
85
|
-
ex.Message,
|
|
86
|
-
width: 450,
|
|
87
|
-
minWidth: 450,
|
|
88
|
-
height: 460,
|
|
89
|
-
minHeight: 460);
|
|
90
|
-
}
|
|
91
|
-
catch (System.Exception ex)
|
|
92
|
-
{
|
|
93
|
-
var command = $"{processInfo.FileName} {processInfo.Arguments}";
|
|
94
|
-
NotificationPopupWindow.Show(
|
|
95
|
-
windowTitle: "Launch Failed",
|
|
96
|
-
title: "Unexpected error starting MCP Inspector",
|
|
97
|
-
message:
|
|
98
|
-
"An unexpected error occurred while trying to start the MCP Inspector.\n\n" +
|
|
99
|
-
"You can try running the following command manually in a terminal:\n" +
|
|
100
|
-
command + "\n\n" +
|
|
101
|
-
"Error details:\n" +
|
|
102
|
-
ex.Message,
|
|
103
|
-
width: 450,
|
|
104
|
-
minWidth: 450,
|
|
105
|
-
height: 460,
|
|
106
|
-
minHeight: 460);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
[MenuItem("Tools/Unity Co-Pilot/Debug/Show Update Popup", priority = 2000)]
|
|
51
|
+
[MenuItem(ProductInfo.ToolsMenuRoot + "/Debug/Show Update Popup", priority = 2000)]
|
|
111
52
|
public static void ShowUpdatePopup() => UpdatePopupWindow.ShowWindow(UnityCopilotPlugin.Version, "99.99.99");
|
|
112
53
|
|
|
113
|
-
[MenuItem("
|
|
54
|
+
[MenuItem(ProductInfo.ToolsMenuRoot + "/Debug/Reset Update Preferences", priority = 2001)]
|
|
114
55
|
public static void ResetUpdatePreferences()
|
|
115
56
|
{
|
|
116
57
|
UpdateChecker.ClearPreferences();
|
|
117
58
|
Debug.Log("Update preferences have been reset.");
|
|
118
59
|
}
|
|
119
60
|
|
|
120
|
-
[MenuItem("
|
|
61
|
+
[MenuItem(ProductInfo.ToolsMenuRoot + "/Debug/Serialization Check", priority = 2002)]
|
|
121
62
|
public static void ShowSerializationCheck() => SerializationCheckWindow.ShowWindow();
|
|
122
63
|
|
|
123
|
-
[MenuItem("
|
|
64
|
+
[MenuItem(ProductInfo.ToolsMenuRoot + "/Reset Config", priority = 2020)]
|
|
124
65
|
public static void ResetConfig()
|
|
125
66
|
{
|
|
126
67
|
UnityCopilotPluginEditor.ResetConfig();
|
package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Overlay/OpenWindowButton.cs
CHANGED
|
@@ -24,9 +24,9 @@ namespace com.AtelierAI.Unity.Copilot.Editor.UI
|
|
|
24
24
|
|
|
25
25
|
public OpenWindowButton()
|
|
26
26
|
{
|
|
27
|
-
text = "Unity
|
|
27
|
+
text = "Unity Copilot";
|
|
28
28
|
icon = EditorAssetLoader.LoadAssetAtPath<Texture2D>(EditorAssetLoader.PackageLogoIcon);
|
|
29
|
-
tooltip = "Open Unity
|
|
29
|
+
tooltip = "Open Unity Copilot window";
|
|
30
30
|
clicked += MainWindowEditor.ShowWindowVoid;
|
|
31
31
|
RegisterCallback<DetachFromPanelEvent>(OnDetachFromPanel);
|
|
32
32
|
}
|
|
@@ -18,21 +18,21 @@ namespace com.AtelierAI.Unity.Copilot.Editor.UI
|
|
|
18
18
|
{
|
|
19
19
|
/// <summary>
|
|
20
20
|
/// Exposes Unity-MCP's team-shared update settings under
|
|
21
|
-
/// <c>Edit ▸ Project Settings ▸ Unity
|
|
21
|
+
/// <c>Edit ▸ Project Settings ▸ Unity Copilot</c>.
|
|
22
22
|
/// </summary>
|
|
23
23
|
/// <remarks>
|
|
24
24
|
/// Mutations write through to <see cref="UnityCopilotUpdateProjectSettings"/>, whose backing
|
|
25
|
-
/// asset (<c>ProjectSettings/
|
|
25
|
+
/// asset (<c>ProjectSettings/Copilot-UpdateSettings.asset</c>) is intended to be
|
|
26
26
|
/// committed to VCS. See https://github.com/IvanMurzak/uco-plugin/issues/768.
|
|
27
27
|
/// </remarks>
|
|
28
28
|
internal static class UnityCopilotProjectSettingsProvider
|
|
29
29
|
{
|
|
30
|
-
private const string SettingsPath = "Project/Unity
|
|
30
|
+
private const string SettingsPath = "Project/Unity Copilot";
|
|
31
31
|
|
|
32
32
|
[SettingsProvider]
|
|
33
33
|
public static SettingsProvider Create() => new SettingsProvider(SettingsPath, SettingsScope.Project)
|
|
34
34
|
{
|
|
35
|
-
label = "Unity
|
|
35
|
+
label = "Unity Copilot",
|
|
36
36
|
guiHandler = _ =>
|
|
37
37
|
{
|
|
38
38
|
EditorGUILayout.LabelField("Update Notifications", EditorStyles.boldLabel);
|
|
@@ -50,7 +50,7 @@ namespace com.AtelierAI.Unity.Copilot.Editor.UI
|
|
|
50
50
|
|
|
51
51
|
EditorGUILayout.Space();
|
|
52
52
|
EditorGUILayout.HelpBox(
|
|
53
|
-
"This setting is stored in ProjectSettings/
|
|
53
|
+
"This setting is stored in ProjectSettings/Copilot-UpdateSettings.asset " +
|
|
54
54
|
"and is shared with everyone who clones this project. The per-user 'Do not show again' " +
|
|
55
55
|
"button on the update popup is unaffected by this setting.",
|
|
56
56
|
MessageType.Info);
|