@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.
Files changed (204) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.md +7 -8
  3. package/bin/server.mjs +1 -1
  4. package/bin/stub-plugin.mjs +3 -3
  5. package/dist/codegen/coerce.js +1 -1
  6. package/dist/codegen/coerce.js.map +1 -1
  7. package/dist/codegen/emit.js +2 -2
  8. package/dist/codegen/emit.js.map +1 -1
  9. package/dist/codegen/refs.js +1 -1
  10. package/dist/codegen/refs.js.map +1 -1
  11. package/dist/codegen/types.js +1 -1
  12. package/dist/codegen/types.js.map +1 -1
  13. package/dist/commands/call.js +1 -1
  14. package/dist/commands/call.js.map +1 -1
  15. package/dist/commands/devops/configure.js +1 -1
  16. package/dist/commands/devops/configure.js.map +1 -1
  17. package/dist/commands/devops/index.js +0 -4
  18. package/dist/commands/devops/index.js.map +1 -1
  19. package/dist/commands/devops/install-plugin.js +1 -1
  20. package/dist/commands/devops/install-plugin.js.map +1 -1
  21. package/dist/commands/devops/open.js +7 -7
  22. package/dist/commands/devops/open.js.map +1 -1
  23. package/dist/commands/devops/status.js +3 -3
  24. package/dist/commands/devops/status.js.map +1 -1
  25. package/dist/commands/exec.js +1 -1
  26. package/dist/commands/exec.js.map +1 -1
  27. package/dist/commands/install.js +2 -2
  28. package/dist/commands/install.js.map +1 -1
  29. package/dist/commands/prompt.js +2 -2
  30. package/dist/commands/prompt.js.map +1 -1
  31. package/dist/commands/resource.js +2 -2
  32. package/dist/commands/resource.js.map +1 -1
  33. package/dist/commands/update.js +1 -26
  34. package/dist/commands/update.js.map +1 -1
  35. package/dist/config/port.js +2 -2
  36. package/dist/config/port.js.map +1 -1
  37. package/dist/config/resolve.d.ts +1 -2
  38. package/dist/config/resolve.js +0 -12
  39. package/dist/config/resolve.js.map +1 -1
  40. package/dist/devops/lib/configure.d.ts +1 -1
  41. package/dist/devops/lib/configure.js +2 -2
  42. package/dist/devops/lib/configure.js.map +1 -1
  43. package/dist/devops/lib/install-plugin.d.ts +1 -1
  44. package/dist/devops/lib/install-plugin.js +1 -1
  45. package/dist/devops/lib/install-plugin.js.map +1 -1
  46. package/dist/devops/lib/install.d.ts +2 -2
  47. package/dist/devops/lib/install.js +5 -5
  48. package/dist/devops/lib/install.js.map +1 -1
  49. package/dist/devops/lib/open.js +11 -32
  50. package/dist/devops/lib/open.js.map +1 -1
  51. package/dist/devops/lib/remove-plugin.d.ts +1 -1
  52. package/dist/devops/lib/remove-plugin.js +3 -3
  53. package/dist/devops/lib/remove-plugin.js.map +1 -1
  54. package/dist/devops/lib/run-tool.d.ts +2 -2
  55. package/dist/devops/lib/run-tool.js +2 -2
  56. package/dist/devops/lib/types.d.ts +17 -54
  57. package/dist/devops/lib/types.js +2 -2
  58. package/dist/devops/lib/types.js.map +1 -1
  59. package/dist/devops/lib/update.d.ts +0 -15
  60. package/dist/devops/lib/update.js +2 -91
  61. package/dist/devops/lib/update.js.map +1 -1
  62. package/dist/devops/utils/agents.d.ts +0 -28
  63. package/dist/devops/utils/agents.js +0 -462
  64. package/dist/devops/utils/agents.js.map +1 -1
  65. package/dist/devops/utils/config.d.ts +9 -18
  66. package/dist/devops/utils/config.js +7 -20
  67. package/dist/devops/utils/config.js.map +1 -1
  68. package/dist/devops/utils/editor-cache.js +1 -1
  69. package/dist/devops/utils/editor-cache.js.map +1 -1
  70. package/dist/devops/utils/launch-error-dismiss.d.ts +2 -2
  71. package/dist/devops/utils/launch-error-dismiss.js +5 -5
  72. package/dist/devops/utils/manifest.d.ts +2 -2
  73. package/dist/devops/utils/manifest.js +3 -3
  74. package/dist/devops/utils/manifest.js.map +1 -1
  75. package/dist/devops/utils/port.d.ts +1 -1
  76. package/dist/devops/utils/port.js +1 -1
  77. package/dist/devops/utils/probe.d.ts +1 -1
  78. package/dist/devops/utils/probe.js +1 -1
  79. package/dist/devops/utils/ui.js +2 -2
  80. package/dist/devops/utils/ui.js.map +1 -1
  81. package/dist/devops/utils/unity-editor.js +4 -4
  82. package/dist/devops/utils/unity-editor.js.map +1 -1
  83. package/dist/devops/utils/unity-hub.js +1 -1
  84. package/dist/devops/utils/unity-hub.js.map +1 -1
  85. package/dist/devops/utils/unity-shutdown.d.ts +1 -1
  86. package/dist/devops/utils/unity-shutdown.js +1 -1
  87. package/dist/devops/utils/update-check.js +3 -3
  88. package/dist/devops/utils/update-check.js.map +1 -1
  89. package/dist/devops/utils/vendor.d.ts +2 -2
  90. package/dist/devops/utils/vendor.js +4 -4
  91. package/dist/devops/utils/vendor.js.map +1 -1
  92. package/dist/generated/tools.js +1 -1
  93. package/dist/generated/tools.js.map +1 -1
  94. package/dist/program.js +3 -3
  95. package/dist/program.js.map +1 -1
  96. package/dist/server/app.d.ts +5 -5
  97. package/dist/server/app.js +3 -3
  98. package/dist/server/app.js.map +1 -1
  99. package/dist/server/index.d.ts +2 -2
  100. package/dist/server/index.js +2 -2
  101. package/dist/server/index.js.map +1 -1
  102. package/dist/server/rest/auth.d.ts +1 -1
  103. package/dist/server/rest/auth.js +3 -3
  104. package/dist/server/rest/auth.js.map +1 -1
  105. package/dist/server/rest/context.d.ts +2 -2
  106. package/dist/server/rest/forward.d.ts +2 -2
  107. package/dist/server/session/store.d.ts +3 -3
  108. package/dist/server/session/store.js +4 -4
  109. package/dist/server/session/store.js.map +1 -1
  110. package/dist/server/stub-client/scenarios.js +8 -8
  111. package/dist/server/stub-client/scenarios.js.map +1 -1
  112. package/dist/server/types.d.ts +11 -11
  113. package/dist/server/types.js +9 -9
  114. package/dist/server/types.js.map +1 -1
  115. package/dist/server/ws/hub.d.ts +8 -8
  116. package/dist/server/ws/hub.js +13 -13
  117. package/dist/server/ws/hub.js.map +1 -1
  118. package/dist/server/ws/rpc.d.ts +3 -3
  119. package/dist/server/ws/rpc.js +4 -4
  120. package/dist/server/ws/rpc.js.map +1 -1
  121. package/dist/transport/index.d.ts +1 -1
  122. package/dist/transport/index.js +3 -3
  123. package/dist/transport/index.js.map +1 -1
  124. package/dist/transport/rest.js +1 -1
  125. package/dist/transport/rest.js.map +1 -1
  126. package/docs/INSTALL.zh-CN.md +2 -3
  127. package/package.json +1 -1
  128. package/skills/uco-setup/SKILL.md +1 -1
  129. package/skills/unity-editor/references/diagnostics.md +24 -24
  130. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Components/ExtensionPanel.cs +379 -379
  131. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/MenuItems.cs +72 -72
  132. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/UnityCopilotProjectSettingsProvider.cs +64 -64
  133. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/MainWindowEditor.CopilotServer.cs +372 -372
  134. package/vendor/plugin/com.atelierai.unity.copilot/Plugins/ReflectorNet.dll +0 -0
  135. package/vendor/plugin/com.atelierai.unity.copilot/Plugins/Uco.Framework.Common.dll +0 -0
  136. package/vendor/plugin/com.atelierai.unity.copilot/Plugins/Uco.Framework.dll +0 -0
  137. package/vendor/plugin/com.atelierai.unity.copilot/Runtime/UnityCopilotPlugin.Config.cs +175 -175
  138. package/vendor/plugin/com.atelierai.unity.copilot/Runtime/UnityCopilotPlugin.cs +1 -1
  139. package/vendor/plugin/com.atelierai.unity.copilot/Runtime/Utils/EnvironmentUtils.cs +368 -368
  140. package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Environment/EnvironmentUtilsTests.cs +3 -3
  141. package/vendor/plugin/com.atelierai.unity.copilot/package.json +1 -1
  142. package/dist/commands/devops/login.d.ts +0 -2
  143. package/dist/commands/devops/login.js +0 -29
  144. package/dist/commands/devops/login.js.map +0 -1
  145. package/dist/commands/devops/setup-mcp.d.ts +0 -2
  146. package/dist/commands/devops/setup-mcp.js +0 -41
  147. package/dist/commands/devops/setup-mcp.js.map +0 -1
  148. package/dist/devops/commands-upstream/bootstrap-local.d.ts +0 -17
  149. package/dist/devops/commands-upstream/bootstrap-local.js +0 -87
  150. package/dist/devops/commands-upstream/bootstrap-local.js.map +0 -1
  151. package/dist/devops/commands-upstream/close.d.ts +0 -57
  152. package/dist/devops/commands-upstream/close.js +0 -188
  153. package/dist/devops/commands-upstream/close.js.map +0 -1
  154. package/dist/devops/commands-upstream/configure.d.ts +0 -2
  155. package/dist/devops/commands-upstream/configure.js +0 -87
  156. package/dist/devops/commands-upstream/configure.js.map +0 -1
  157. package/dist/devops/commands-upstream/create-project.d.ts +0 -2
  158. package/dist/devops/commands-upstream/create-project.js +0 -43
  159. package/dist/devops/commands-upstream/create-project.js.map +0 -1
  160. package/dist/devops/commands-upstream/install-plugin.d.ts +0 -2
  161. package/dist/devops/commands-upstream/install-plugin.js +0 -64
  162. package/dist/devops/commands-upstream/install-plugin.js.map +0 -1
  163. package/dist/devops/commands-upstream/install-unity.d.ts +0 -2
  164. package/dist/devops/commands-upstream/install-unity.js +0 -72
  165. package/dist/devops/commands-upstream/install-unity.js.map +0 -1
  166. package/dist/devops/commands-upstream/login.d.ts +0 -2
  167. package/dist/devops/commands-upstream/login.js +0 -33
  168. package/dist/devops/commands-upstream/login.js.map +0 -1
  169. package/dist/devops/commands-upstream/open.d.ts +0 -32
  170. package/dist/devops/commands-upstream/open.js +0 -282
  171. package/dist/devops/commands-upstream/open.js.map +0 -1
  172. package/dist/devops/commands-upstream/remove-plugin.d.ts +0 -2
  173. package/dist/devops/commands-upstream/remove-plugin.js +0 -41
  174. package/dist/devops/commands-upstream/remove-plugin.js.map +0 -1
  175. package/dist/devops/commands-upstream/run-system-tool.d.ts +0 -1
  176. package/dist/devops/commands-upstream/run-system-tool.js +0 -13
  177. package/dist/devops/commands-upstream/run-system-tool.js.map +0 -1
  178. package/dist/devops/commands-upstream/run-tool-builder.d.ts +0 -25
  179. package/dist/devops/commands-upstream/run-tool-builder.js +0 -125
  180. package/dist/devops/commands-upstream/run-tool-builder.js.map +0 -1
  181. package/dist/devops/commands-upstream/run-tool.d.ts +0 -1
  182. package/dist/devops/commands-upstream/run-tool.js +0 -13
  183. package/dist/devops/commands-upstream/run-tool.js.map +0 -1
  184. package/dist/devops/commands-upstream/setup-mcp.d.ts +0 -2
  185. package/dist/devops/commands-upstream/setup-mcp.js +0 -68
  186. package/dist/devops/commands-upstream/setup-mcp.js.map +0 -1
  187. package/dist/devops/commands-upstream/setup-skills.d.ts +0 -2
  188. package/dist/devops/commands-upstream/setup-skills.js +0 -167
  189. package/dist/devops/commands-upstream/setup-skills.js.map +0 -1
  190. package/dist/devops/commands-upstream/status.d.ts +0 -2
  191. package/dist/devops/commands-upstream/status.js +0 -87
  192. package/dist/devops/commands-upstream/status.js.map +0 -1
  193. package/dist/devops/commands-upstream/update.d.ts +0 -2
  194. package/dist/devops/commands-upstream/update.js +0 -77
  195. package/dist/devops/commands-upstream/update.js.map +0 -1
  196. package/dist/devops/commands-upstream/wait-for-ready.d.ts +0 -2
  197. package/dist/devops/commands-upstream/wait-for-ready.js +0 -93
  198. package/dist/devops/commands-upstream/wait-for-ready.js.map +0 -1
  199. package/dist/devops/lib/setup-mcp.d.ts +0 -35
  200. package/dist/devops/lib/setup-mcp.js +0 -172
  201. package/dist/devops/lib/setup-mcp.js.map +0 -1
  202. package/dist/devops/utils/cloud-login.d.ts +0 -7
  203. package/dist/devops/utils/cloud-login.js +0 -56
  204. package/dist/devops/utils/cloud-login.js.map +0 -1
@@ -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>UNITY_MCP_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
- }
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.4";
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;