@atelierai/uco 1.0.5 → 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 +30 -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 -172
- 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
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,175 +1,175 @@
|
|
|
1
|
-
/*
|
|
2
|
-
┌──────────────────────────────────────────────────────────────────┐
|
|
3
|
-
│ Author: Ivan Murzak (https://github.com/IvanMurzak) │
|
|
4
|
-
│ Repository: GitHub (https://github.com/IvanMurzak/Unity-MCP) │
|
|
5
|
-
│ Copyright (c) 2025 Ivan Murzak │
|
|
6
|
-
│ Licensed under the Apache License, Version 2.0. │
|
|
7
|
-
│ See the LICENSE file in the project root for more information. │
|
|
8
|
-
└──────────────────────────────────────────────────────────────────┘
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
#nullable enable
|
|
12
|
-
using System;
|
|
13
|
-
using System.Collections.Generic;
|
|
14
|
-
using System.Text.Json.Serialization;
|
|
15
|
-
using com.AtelierAI.Uco.Framework;
|
|
16
|
-
using com.AtelierAI.Uco.Framework.Common;
|
|
17
|
-
using com.AtelierAI.Uco.Framework.Common.Utils;
|
|
18
|
-
using com.AtelierAI.Unity.Copilot.Runtime.Utils;
|
|
19
|
-
using static com.AtelierAI.Uco.Framework.Common.Consts.MCP.Server;
|
|
20
|
-
|
|
21
|
-
namespace com.AtelierAI.Unity.Copilot
|
|
22
|
-
{
|
|
23
|
-
public partial class UnityCopilotPlugin
|
|
24
|
-
{
|
|
25
|
-
protected readonly object configMutex = new();
|
|
26
|
-
|
|
27
|
-
protected UnityConnectionConfig unityConnectionConfig = null!; // Set by subclass constructors
|
|
28
|
-
|
|
29
|
-
public class UnityConnectionConfig : ConnectionConfig
|
|
30
|
-
{
|
|
31
|
-
public static string DefaultHost => $"http://localhost:{GeneratePortFromDirectory()}";
|
|
32
|
-
|
|
33
|
-
public static List<CopilotFeature> DefaultTools => new();
|
|
34
|
-
public static List<CopilotFeature> DefaultPrompts => new();
|
|
35
|
-
public static List<CopilotFeature> DefaultResources => new();
|
|
36
|
-
|
|
37
|
-
/// <summary>
|
|
38
|
-
/// The local server URL. Serialized as "host" in JSON.
|
|
39
|
-
/// </summary>
|
|
40
|
-
[JsonPropertyName("host")]
|
|
41
|
-
public string LocalHost { get; set; } = DefaultHost;
|
|
42
|
-
|
|
43
|
-
/// <summary>
|
|
44
|
-
/// The local auth token. Serialized as "token" in JSON.
|
|
45
|
-
/// </summary>
|
|
46
|
-
[JsonPropertyName("token")]
|
|
47
|
-
public string? LocalToken { get; set; }
|
|
48
|
-
|
|
49
|
-
[JsonIgnore]
|
|
50
|
-
public override string Host
|
|
51
|
-
{
|
|
52
|
-
get => LocalHost;
|
|
53
|
-
set => LocalHost = value;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
[JsonIgnore]
|
|
57
|
-
public override string? Token
|
|
58
|
-
{
|
|
59
|
-
get => LocalToken;
|
|
60
|
-
set => LocalToken = value;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
public LogLevel LogLevel { get; set; } = LogLevel.Warning;
|
|
64
|
-
public bool KeepServerRunning { get; set; } = false;
|
|
65
|
-
public TransportMethod TransportMethod { get; set; } = TransportMethod.streamableHttp;
|
|
66
|
-
public AuthOption AuthOption { get; set; } = AuthOption.none;
|
|
67
|
-
public ConnectionMode ConnectionMode { get; set; } = ConnectionMode.Custom;
|
|
68
|
-
|
|
69
|
-
/// <summary>
|
|
70
|
-
/// Optional path to the Node.js MCP server entry script (cocli's bin/server.mjs).
|
|
71
|
-
/// Absolute path, or relative to the Unity project root. When null/empty the
|
|
72
|
-
/// plugin auto-discovers the server (the Unity project's node_modules, then the
|
|
73
|
-
/// npm global installation). When set, the path must exist or the plugin refuses
|
|
74
|
-
/// to launch the server (it will still connect to an already-running one).
|
|
75
|
-
/// Serialized as "nodeServerPath" in JSON.
|
|
76
|
-
/// </summary>
|
|
77
|
-
[JsonPropertyName("nodeServerPath")]
|
|
78
|
-
public string? NodeServerPath { get; set; }
|
|
79
|
-
|
|
80
|
-
// ── Safe-defaults (fail-closed) network gates ─────────────────────────────────
|
|
81
|
-
//
|
|
82
|
-
// These three flags collectively implement a fail-closed posture for newly-created
|
|
83
|
-
// configs: by default the plugin refuses to bind to LAN/all-interfaces and refuses to
|
|
84
|
-
// talk plaintext HTTP to a remote host, and it requires a token whenever a LAN bind
|
|
85
|
-
// is enabled. Existing on-disk configs that already use a non-loopback LocalHost are
|
|
86
|
-
// auto-migrated in UnityCopilotPluginEditor.GetOrCreateConfig so the new flags do NOT
|
|
87
|
-
// silently break installations that were intentionally opened up before this change.
|
|
88
|
-
//
|
|
89
|
-
// The gates are consulted by SafeDefaultsGuard at server-start time and by the
|
|
90
|
-
// UI / configurators when they emit warnings. They are NOT enforced server-side
|
|
91
|
-
// (the server binary is a separate NuGet package); they gate the *plugin's*
|
|
92
|
-
// willingness to start the local server with an unsafe LocalHost or to generate
|
|
93
|
-
// insecure remote configurations.
|
|
94
|
-
|
|
95
|
-
/// <summary>
|
|
96
|
-
/// When false (the safe default for new configs), the plugin refuses to start the
|
|
97
|
-
/// local MCP server if <see cref="LocalHost"/> resolves to a non-loopback address
|
|
98
|
-
/// (e.g. <c>0.0.0.0</c>, <c>::</c>, or a LAN IP). Set to true to opt in to binding
|
|
99
|
-
/// the server on every interface so other machines on the LAN can connect.
|
|
100
|
-
/// </summary>
|
|
101
|
-
public bool AllowLanBind { get; set; } = false;
|
|
102
|
-
|
|
103
|
-
/// <summary>
|
|
104
|
-
/// When false (the safe default), the plugin warns / refuses to emit AI-agent client
|
|
105
|
-
/// configurations that point at a remote (non-loopback) URL over plain <c>http://</c>.
|
|
106
|
-
/// Set to true to acknowledge the lack of TLS on a remote endpoint and proceed anyway.
|
|
107
|
-
/// </summary>
|
|
108
|
-
public bool AllowInsecureRemoteHttp { get; set; } = false;
|
|
109
|
-
|
|
110
|
-
/// <summary>
|
|
111
|
-
/// When true (the safe default), enabling <see cref="AllowLanBind"/> additionally
|
|
112
|
-
/// requires a non-empty <see cref="Token"/> with <see cref="AuthOption"/> set to
|
|
113
|
-
/// <c>required</c>. Set to false only when LAN bind needs to coexist with
|
|
114
|
-
/// <c>auth=none</c> (not recommended).
|
|
115
|
-
/// </summary>
|
|
116
|
-
public bool ForceTokenWhenLanBind { get; set; } = true;
|
|
117
|
-
public List<CopilotFeature> Tools { get; set; } = new();
|
|
118
|
-
public List<CopilotFeature> Prompts { get; set; } = new();
|
|
119
|
-
public List<CopilotFeature> Resources { get; set; } = new();
|
|
120
|
-
|
|
121
|
-
/// <summary>
|
|
122
|
-
/// When non-null, only the tools whose names appear in this list are enabled;
|
|
123
|
-
/// all others are disabled. Set by the <c>
|
|
124
|
-
/// (comma-separated tool IDs). Not persisted to disk.
|
|
125
|
-
/// </summary>
|
|
126
|
-
[JsonIgnore]
|
|
127
|
-
public List<string>? EnabledToolsOverride { get; set; }
|
|
128
|
-
|
|
129
|
-
public UnityConnectionConfig()
|
|
130
|
-
{
|
|
131
|
-
SetDefault();
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
public UnityConnectionConfig SetDefault()
|
|
135
|
-
{
|
|
136
|
-
Host = DefaultHost;
|
|
137
|
-
var isCi = EnvironmentUtils.IsCi();
|
|
138
|
-
KeepConnected = !isCi;
|
|
139
|
-
KeepServerRunning = !isCi;
|
|
140
|
-
TransportMethod = TransportMethod.streamableHttp;
|
|
141
|
-
AuthOption = AuthOption.none;
|
|
142
|
-
ConnectionMode = ConnectionMode.Custom;
|
|
143
|
-
NodeServerPath = null;
|
|
144
|
-
LogLevel = LogLevel.Warning;
|
|
145
|
-
TimeoutMs = Consts.Hub.DefaultTimeoutMs;
|
|
146
|
-
Tools = DefaultTools;
|
|
147
|
-
Prompts = DefaultPrompts;
|
|
148
|
-
Resources = DefaultResources;
|
|
149
|
-
Token = GenerateToken();
|
|
150
|
-
return this;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
public class CopilotFeature
|
|
154
|
-
{
|
|
155
|
-
public string Name { get; set; } = string.Empty;
|
|
156
|
-
public bool Enabled { get; set; } = true;
|
|
157
|
-
|
|
158
|
-
public CopilotFeature() { }
|
|
159
|
-
public CopilotFeature(string name, bool enabled)
|
|
160
|
-
{
|
|
161
|
-
Name = name;
|
|
162
|
-
Enabled = enabled;
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
/// <summary>Local/custom server connection. The legacy Cloud mode (remote
|
|
169
|
-
/// ai-game.dev endpoint) was removed in 1.0.3; configs that still carry
|
|
170
|
-
/// "Cloud" are mapped to Custom on load.</summary>
|
|
171
|
-
public enum ConnectionMode
|
|
172
|
-
{
|
|
173
|
-
Custom
|
|
174
|
-
}
|
|
175
|
-
}
|
|
1
|
+
/*
|
|
2
|
+
┌──────────────────────────────────────────────────────────────────┐
|
|
3
|
+
│ Author: Ivan Murzak (https://github.com/IvanMurzak) │
|
|
4
|
+
│ Repository: GitHub (https://github.com/IvanMurzak/Unity-MCP) │
|
|
5
|
+
│ Copyright (c) 2025 Ivan Murzak │
|
|
6
|
+
│ Licensed under the Apache License, Version 2.0. │
|
|
7
|
+
│ See the LICENSE file in the project root for more information. │
|
|
8
|
+
└──────────────────────────────────────────────────────────────────┘
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
#nullable enable
|
|
12
|
+
using System;
|
|
13
|
+
using System.Collections.Generic;
|
|
14
|
+
using System.Text.Json.Serialization;
|
|
15
|
+
using com.AtelierAI.Uco.Framework;
|
|
16
|
+
using com.AtelierAI.Uco.Framework.Common;
|
|
17
|
+
using com.AtelierAI.Uco.Framework.Common.Utils;
|
|
18
|
+
using com.AtelierAI.Unity.Copilot.Runtime.Utils;
|
|
19
|
+
using static com.AtelierAI.Uco.Framework.Common.Consts.MCP.Server;
|
|
20
|
+
|
|
21
|
+
namespace com.AtelierAI.Unity.Copilot
|
|
22
|
+
{
|
|
23
|
+
public partial class UnityCopilotPlugin
|
|
24
|
+
{
|
|
25
|
+
protected readonly object configMutex = new();
|
|
26
|
+
|
|
27
|
+
protected UnityConnectionConfig unityConnectionConfig = null!; // Set by subclass constructors
|
|
28
|
+
|
|
29
|
+
public class UnityConnectionConfig : ConnectionConfig
|
|
30
|
+
{
|
|
31
|
+
public static string DefaultHost => $"http://localhost:{GeneratePortFromDirectory()}";
|
|
32
|
+
|
|
33
|
+
public static List<CopilotFeature> DefaultTools => new();
|
|
34
|
+
public static List<CopilotFeature> DefaultPrompts => new();
|
|
35
|
+
public static List<CopilotFeature> DefaultResources => new();
|
|
36
|
+
|
|
37
|
+
/// <summary>
|
|
38
|
+
/// The local server URL. Serialized as "host" in JSON.
|
|
39
|
+
/// </summary>
|
|
40
|
+
[JsonPropertyName("host")]
|
|
41
|
+
public string LocalHost { get; set; } = DefaultHost;
|
|
42
|
+
|
|
43
|
+
/// <summary>
|
|
44
|
+
/// The local auth token. Serialized as "token" in JSON.
|
|
45
|
+
/// </summary>
|
|
46
|
+
[JsonPropertyName("token")]
|
|
47
|
+
public string? LocalToken { get; set; }
|
|
48
|
+
|
|
49
|
+
[JsonIgnore]
|
|
50
|
+
public override string Host
|
|
51
|
+
{
|
|
52
|
+
get => LocalHost;
|
|
53
|
+
set => LocalHost = value;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
[JsonIgnore]
|
|
57
|
+
public override string? Token
|
|
58
|
+
{
|
|
59
|
+
get => LocalToken;
|
|
60
|
+
set => LocalToken = value;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
public LogLevel LogLevel { get; set; } = LogLevel.Warning;
|
|
64
|
+
public bool KeepServerRunning { get; set; } = false;
|
|
65
|
+
public TransportMethod TransportMethod { get; set; } = TransportMethod.streamableHttp;
|
|
66
|
+
public AuthOption AuthOption { get; set; } = AuthOption.none;
|
|
67
|
+
public ConnectionMode ConnectionMode { get; set; } = ConnectionMode.Custom;
|
|
68
|
+
|
|
69
|
+
/// <summary>
|
|
70
|
+
/// Optional path to the Node.js MCP server entry script (cocli's bin/server.mjs).
|
|
71
|
+
/// Absolute path, or relative to the Unity project root. When null/empty the
|
|
72
|
+
/// plugin auto-discovers the server (the Unity project's node_modules, then the
|
|
73
|
+
/// npm global installation). When set, the path must exist or the plugin refuses
|
|
74
|
+
/// to launch the server (it will still connect to an already-running one).
|
|
75
|
+
/// Serialized as "nodeServerPath" in JSON.
|
|
76
|
+
/// </summary>
|
|
77
|
+
[JsonPropertyName("nodeServerPath")]
|
|
78
|
+
public string? NodeServerPath { get; set; }
|
|
79
|
+
|
|
80
|
+
// ── Safe-defaults (fail-closed) network gates ─────────────────────────────────
|
|
81
|
+
//
|
|
82
|
+
// These three flags collectively implement a fail-closed posture for newly-created
|
|
83
|
+
// configs: by default the plugin refuses to bind to LAN/all-interfaces and refuses to
|
|
84
|
+
// talk plaintext HTTP to a remote host, and it requires a token whenever a LAN bind
|
|
85
|
+
// is enabled. Existing on-disk configs that already use a non-loopback LocalHost are
|
|
86
|
+
// auto-migrated in UnityCopilotPluginEditor.GetOrCreateConfig so the new flags do NOT
|
|
87
|
+
// silently break installations that were intentionally opened up before this change.
|
|
88
|
+
//
|
|
89
|
+
// The gates are consulted by SafeDefaultsGuard at server-start time and by the
|
|
90
|
+
// UI / configurators when they emit warnings. They are NOT enforced server-side
|
|
91
|
+
// (the server binary is a separate NuGet package); they gate the *plugin's*
|
|
92
|
+
// willingness to start the local server with an unsafe LocalHost or to generate
|
|
93
|
+
// insecure remote configurations.
|
|
94
|
+
|
|
95
|
+
/// <summary>
|
|
96
|
+
/// When false (the safe default for new configs), the plugin refuses to start the
|
|
97
|
+
/// local MCP server if <see cref="LocalHost"/> resolves to a non-loopback address
|
|
98
|
+
/// (e.g. <c>0.0.0.0</c>, <c>::</c>, or a LAN IP). Set to true to opt in to binding
|
|
99
|
+
/// the server on every interface so other machines on the LAN can connect.
|
|
100
|
+
/// </summary>
|
|
101
|
+
public bool AllowLanBind { get; set; } = false;
|
|
102
|
+
|
|
103
|
+
/// <summary>
|
|
104
|
+
/// When false (the safe default), the plugin warns / refuses to emit AI-agent client
|
|
105
|
+
/// configurations that point at a remote (non-loopback) URL over plain <c>http://</c>.
|
|
106
|
+
/// Set to true to acknowledge the lack of TLS on a remote endpoint and proceed anyway.
|
|
107
|
+
/// </summary>
|
|
108
|
+
public bool AllowInsecureRemoteHttp { get; set; } = false;
|
|
109
|
+
|
|
110
|
+
/// <summary>
|
|
111
|
+
/// When true (the safe default), enabling <see cref="AllowLanBind"/> additionally
|
|
112
|
+
/// requires a non-empty <see cref="Token"/> with <see cref="AuthOption"/> set to
|
|
113
|
+
/// <c>required</c>. Set to false only when LAN bind needs to coexist with
|
|
114
|
+
/// <c>auth=none</c> (not recommended).
|
|
115
|
+
/// </summary>
|
|
116
|
+
public bool ForceTokenWhenLanBind { get; set; } = true;
|
|
117
|
+
public List<CopilotFeature> Tools { get; set; } = new();
|
|
118
|
+
public List<CopilotFeature> Prompts { get; set; } = new();
|
|
119
|
+
public List<CopilotFeature> Resources { get; set; } = new();
|
|
120
|
+
|
|
121
|
+
/// <summary>
|
|
122
|
+
/// When non-null, only the tools whose names appear in this list are enabled;
|
|
123
|
+
/// all others are disabled. Set by the <c>UNITY_COPILOT_TOOLS</c> environment variable
|
|
124
|
+
/// (comma-separated tool IDs). Not persisted to disk.
|
|
125
|
+
/// </summary>
|
|
126
|
+
[JsonIgnore]
|
|
127
|
+
public List<string>? EnabledToolsOverride { get; set; }
|
|
128
|
+
|
|
129
|
+
public UnityConnectionConfig()
|
|
130
|
+
{
|
|
131
|
+
SetDefault();
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
public UnityConnectionConfig SetDefault()
|
|
135
|
+
{
|
|
136
|
+
Host = DefaultHost;
|
|
137
|
+
var isCi = EnvironmentUtils.IsCi();
|
|
138
|
+
KeepConnected = !isCi;
|
|
139
|
+
KeepServerRunning = !isCi;
|
|
140
|
+
TransportMethod = TransportMethod.streamableHttp;
|
|
141
|
+
AuthOption = AuthOption.none;
|
|
142
|
+
ConnectionMode = ConnectionMode.Custom;
|
|
143
|
+
NodeServerPath = null;
|
|
144
|
+
LogLevel = LogLevel.Warning;
|
|
145
|
+
TimeoutMs = Consts.Hub.DefaultTimeoutMs;
|
|
146
|
+
Tools = DefaultTools;
|
|
147
|
+
Prompts = DefaultPrompts;
|
|
148
|
+
Resources = DefaultResources;
|
|
149
|
+
Token = GenerateToken();
|
|
150
|
+
return this;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
public class CopilotFeature
|
|
154
|
+
{
|
|
155
|
+
public string Name { get; set; } = string.Empty;
|
|
156
|
+
public bool Enabled { get; set; } = true;
|
|
157
|
+
|
|
158
|
+
public CopilotFeature() { }
|
|
159
|
+
public CopilotFeature(string name, bool enabled)
|
|
160
|
+
{
|
|
161
|
+
Name = name;
|
|
162
|
+
Enabled = enabled;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/// <summary>Local/custom server connection. The legacy Cloud mode (remote
|
|
169
|
+
/// ai-game.dev endpoint) was removed in 1.0.3; configs that still carry
|
|
170
|
+
/// "Cloud" are mapped to Custom on load.</summary>
|
|
171
|
+
public enum ConnectionMode
|
|
172
|
+
{
|
|
173
|
+
Custom
|
|
174
|
+
}
|
|
175
|
+
}
|
|
@@ -26,7 +26,7 @@ namespace com.AtelierAI.Unity.Copilot
|
|
|
26
26
|
|
|
27
27
|
public partial class UnityCopilotPlugin : IDisposable
|
|
28
28
|
{
|
|
29
|
-
public const string Version = "1.0.
|
|
29
|
+
public const string Version = "1.0.5";
|
|
30
30
|
|
|
31
31
|
private static int _singletonCount = 0;
|
|
32
32
|
public static bool HasAnyInstance => _singletonCount > 0;
|