@atelierai/uco 1.0.6 → 1.0.8
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 +32 -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/DependencyResolver/NuGetConfig.cs +132 -132
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/DependencyResolver/NuGetDependencyResolver.cs +237 -237
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/DependencyResolver/NuGetDownloader.cs +82 -82
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Resource/MenuItems.cs +247 -247
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Resource/ToolGroups.cs +153 -153
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/SystemTool/Skills.Create.SkillBody.cs +155 -155
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Tool/Console.GetLogs.cs +95 -95
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Tool/Docs.HttpFetcher.cs +139 -139
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Tool/Instance.ListAll.cs +72 -72
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Tool/PathReadHelper.cs +106 -106
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Tool/Script.Validate.cs +252 -252
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Tool/Tests/TestResultCollector.cs +537 -537
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Tool/Tests.cs +400 -400
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Branding/ProductInfo.cs +62 -62
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/CopilotServerManager.cs +1034 -1034
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Skills/Skill_InitialSetup.cs +197 -197
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Startup.Editor.cs +201 -201
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Startup.cs +67 -67
- 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/CopilotListWindowBase.cs +393 -393
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/CopilotWindowBase.cs +113 -113
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/MainWindowEditor.Connection.cs +3 -3
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/MainWindowEditor.CopilotFeatures.cs +195 -195
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/MainWindowEditor.CopilotServer.cs +372 -372
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/MainWindowEditor.CreateGUI.cs +354 -354
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/MainWindowEditor.cs +78 -78
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/MainWindowInitializer.cs +47 -47
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/SerializationCheckWindow.cs +190 -190
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UnityCopilotPluginEditor.Build.cs +91 -91
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UnityCopilotPluginEditor.Config.cs +298 -298
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UnityCopilotPluginEditor.Static.cs +296 -296
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UnityCopilotPluginEditor.cs +69 -69
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/PackageUtils.cs +168 -168
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/PrefsKeyMigration.cs +119 -119
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/SafeDefaultsGuard.cs +180 -180
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/ScriptUtils.cs +229 -229
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/ToolsManifestGenerator.cs +200 -200
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/UnityAuthoringAdapters.cs +1467 -1467
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/UnityAuthoringSafetyReloadGuard.cs +65 -65
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/UnityCopilotUpdateProjectSettings.cs +66 -66
- 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/Converter/Json/Structures/EntityIdConverter.cs +120 -120
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/Data/GameObjectMetadata.cs +110 -110
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/Data/GameObjectMetadata.pre-Unity.6.5.cs +110 -110
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/Unity/Logs/FileLogStorage.cs +547 -547
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/UnityCopilotPlugin.Build.cs +243 -243
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/UnityCopilotPlugin.Config.cs +175 -175
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/UnityCopilotPlugin.cs +295 -295
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/UnityCopilotPluginBuilder.cs +105 -105
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/UnityCopilotPluginRuntime.Static.cs +155 -155
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/UnityCopilotPluginRuntime.cs +59 -59
- package/vendor/plugin/com.atelierai.unity.copilot/Runtime/Utils/EnvironmentUtils.cs +368 -368
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/AtomicApi/AtomicApiTestFixtures.cs +99 -99
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/AtomicApi/TryModifyAtTests.cs +227 -227
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/AuthoringSafetyPilotTests.cs +1050 -1050
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/DependencyResolver/NuGetLegacyMigrationTests.cs +304 -304
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Environment/EnvironmentUtilsTests.cs +4 -4
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/BlacklistTypeTests.cs +416 -416
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/DataFieldScriptableObjectPopulationTests.cs +172 -172
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/DataFieldScriptableObjectPopulationTests.pre-Unity.6.5.cs +169 -169
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/DataPopulationTests.cs +182 -182
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/DataPopulationTests.pre-Unity.6.5.cs +179 -179
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/DataPropertyPopulationTests.cs +175 -175
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/DataPropertyPopulationTests.pre-Unity.6.5.cs +174 -174
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/DataPropertyScriptableObjectPopulationTests.cs +171 -171
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/DataPropertyScriptableObjectPopulationTests.pre-Unity.6.5.cs +170 -170
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Assets/AssetsCreateFolderTests.cs +243 -243
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Assets/AssetsMaterialTests.cs +101 -101
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Assets/AssetsPrefabCreateTests.cs +348 -348
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Assets/AssetsPrefabCreateTests.pre-Unity.6.5.cs +348 -348
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Assets/AssetsShaderTests.cs +194 -194
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/PathBasedToolTests.cs +573 -573
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/PathBasedToolTests.pre-Unity.6.5.cs +513 -513
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Screenshot/ScreenshotCameraTests.cs +154 -154
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Screenshot/ScreenshotCameraTests.pre-Unity.6.5.cs +154 -154
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Screenshot/ScreenshotGameViewTests.cs +164 -164
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Screenshot/ScreenshotSceneViewTests.cs +155 -155
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/ToolParameterTests.cs +56 -56
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/ToolThreadSafetyTests.cs +651 -651
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/ToolThreadSafetyTests.pre-Unity.6.5.cs +651 -651
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ToolBatchExecutionIntegrationTests.cs +407 -407
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/{McpPluginTests.cs → UcoPluginTests.cs} +105 -105
- 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/{McpPluginTests.cs.meta → UcoPluginTests.cs.meta} +0 -0
|
@@ -1,105 +1,105 @@
|
|
|
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.Collections;
|
|
13
|
-
using NUnit.Framework;
|
|
14
|
-
using R3;
|
|
15
|
-
using UnityEngine.TestTools;
|
|
16
|
-
|
|
17
|
-
namespace com.AtelierAI.Unity.Copilot.Editor.Tests
|
|
18
|
-
{
|
|
19
|
-
[TestFixture]
|
|
20
|
-
public class UcoPluginTests : BaseTest
|
|
21
|
-
{
|
|
22
|
-
const int WaitTimeoutTicks = 100000;
|
|
23
|
-
|
|
24
|
-
[Test]
|
|
25
|
-
public void CurrentPlugin_ShouldNotBeNull_WhenInitialized()
|
|
26
|
-
{
|
|
27
|
-
// Act & Assert
|
|
28
|
-
Assert.IsNotNull(UnityCopilotPluginEditor.Instance.UcoPluginInstance, "CurrentPlugin should not be null after initialization");
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
[Test]
|
|
32
|
-
public void
|
|
33
|
-
{
|
|
34
|
-
// Act
|
|
35
|
-
var plugin = UnityCopilotPluginEditor.Instance.UcoPluginInstance;
|
|
36
|
-
|
|
37
|
-
// Assert
|
|
38
|
-
Assert.IsNotNull(plugin, "CurrentPlugin should not be null");
|
|
39
|
-
Assert.IsNotNull(plugin!.UcoManager, "UcoManager should not be null");
|
|
40
|
-
Assert.IsNotNull(plugin!.UcoManager.Reflector, "Reflector should not be null");
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
[UnityTest]
|
|
44
|
-
public IEnumerator PluginProperty_WhereNotNull_Take1_ShouldExecuteCallbackOnce()
|
|
45
|
-
{
|
|
46
|
-
// Arrange
|
|
47
|
-
var callbackExecuted = false;
|
|
48
|
-
var executionCount = 0;
|
|
49
|
-
|
|
50
|
-
// Act
|
|
51
|
-
var subscription = UnityCopilotPluginEditor.PluginProperty
|
|
52
|
-
.WhereNotNull()
|
|
53
|
-
.Take(1)
|
|
54
|
-
.Subscribe(plugin =>
|
|
55
|
-
{
|
|
56
|
-
callbackExecuted = true;
|
|
57
|
-
executionCount++;
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
try
|
|
61
|
-
{
|
|
62
|
-
for (int i = 0; !callbackExecuted && i < WaitTimeoutTicks; i++)
|
|
63
|
-
yield return null;
|
|
64
|
-
|
|
65
|
-
// Assert
|
|
66
|
-
Assert.IsTrue(callbackExecuted, "PluginProperty callback should have executed");
|
|
67
|
-
Assert.AreEqual(1, executionCount, "Take(1) callback should execute exactly once");
|
|
68
|
-
}
|
|
69
|
-
finally
|
|
70
|
-
{
|
|
71
|
-
subscription?.Dispose();
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
[UnityTest]
|
|
76
|
-
public IEnumerator PluginProperty_WhereNotNull_ShouldExecuteCallbackAtLeastOnce()
|
|
77
|
-
{
|
|
78
|
-
// Arrange
|
|
79
|
-
var callbackExecuted = false;
|
|
80
|
-
var executionCount = 0;
|
|
81
|
-
|
|
82
|
-
// Act
|
|
83
|
-
var subscription = UnityCopilotPluginEditor.PluginProperty
|
|
84
|
-
.WhereNotNull()
|
|
85
|
-
.Subscribe(plugin =>
|
|
86
|
-
{
|
|
87
|
-
callbackExecuted = true;
|
|
88
|
-
executionCount++;
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
try
|
|
92
|
-
{
|
|
93
|
-
for (int i = 0; !callbackExecuted && i < WaitTimeoutTicks; i++)
|
|
94
|
-
yield return null;
|
|
95
|
-
|
|
96
|
-
// Assert
|
|
97
|
-
Assert.IsTrue(executionCount >= 1, "PluginProperty callback should have executed at least once");
|
|
98
|
-
}
|
|
99
|
-
finally
|
|
100
|
-
{
|
|
101
|
-
subscription?.Dispose();
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
}
|
|
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.Collections;
|
|
13
|
+
using NUnit.Framework;
|
|
14
|
+
using R3;
|
|
15
|
+
using UnityEngine.TestTools;
|
|
16
|
+
|
|
17
|
+
namespace com.AtelierAI.Unity.Copilot.Editor.Tests
|
|
18
|
+
{
|
|
19
|
+
[TestFixture]
|
|
20
|
+
public class UcoPluginTests : BaseTest
|
|
21
|
+
{
|
|
22
|
+
const int WaitTimeoutTicks = 100000;
|
|
23
|
+
|
|
24
|
+
[Test]
|
|
25
|
+
public void CurrentPlugin_ShouldNotBeNull_WhenInitialized()
|
|
26
|
+
{
|
|
27
|
+
// Act & Assert
|
|
28
|
+
Assert.IsNotNull(UnityCopilotPluginEditor.Instance.UcoPluginInstance, "CurrentPlugin should not be null after initialization");
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
[Test]
|
|
32
|
+
public void CurrentPlugin_ShouldHaveValidPluginManager()
|
|
33
|
+
{
|
|
34
|
+
// Act
|
|
35
|
+
var plugin = UnityCopilotPluginEditor.Instance.UcoPluginInstance;
|
|
36
|
+
|
|
37
|
+
// Assert
|
|
38
|
+
Assert.IsNotNull(plugin, "CurrentPlugin should not be null");
|
|
39
|
+
Assert.IsNotNull(plugin!.UcoManager, "UcoManager should not be null");
|
|
40
|
+
Assert.IsNotNull(plugin!.UcoManager.Reflector, "Reflector should not be null");
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
[UnityTest]
|
|
44
|
+
public IEnumerator PluginProperty_WhereNotNull_Take1_ShouldExecuteCallbackOnce()
|
|
45
|
+
{
|
|
46
|
+
// Arrange
|
|
47
|
+
var callbackExecuted = false;
|
|
48
|
+
var executionCount = 0;
|
|
49
|
+
|
|
50
|
+
// Act
|
|
51
|
+
var subscription = UnityCopilotPluginEditor.PluginProperty
|
|
52
|
+
.WhereNotNull()
|
|
53
|
+
.Take(1)
|
|
54
|
+
.Subscribe(plugin =>
|
|
55
|
+
{
|
|
56
|
+
callbackExecuted = true;
|
|
57
|
+
executionCount++;
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
try
|
|
61
|
+
{
|
|
62
|
+
for (int i = 0; !callbackExecuted && i < WaitTimeoutTicks; i++)
|
|
63
|
+
yield return null;
|
|
64
|
+
|
|
65
|
+
// Assert
|
|
66
|
+
Assert.IsTrue(callbackExecuted, "PluginProperty callback should have executed");
|
|
67
|
+
Assert.AreEqual(1, executionCount, "Take(1) callback should execute exactly once");
|
|
68
|
+
}
|
|
69
|
+
finally
|
|
70
|
+
{
|
|
71
|
+
subscription?.Dispose();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
[UnityTest]
|
|
76
|
+
public IEnumerator PluginProperty_WhereNotNull_ShouldExecuteCallbackAtLeastOnce()
|
|
77
|
+
{
|
|
78
|
+
// Arrange
|
|
79
|
+
var callbackExecuted = false;
|
|
80
|
+
var executionCount = 0;
|
|
81
|
+
|
|
82
|
+
// Act
|
|
83
|
+
var subscription = UnityCopilotPluginEditor.PluginProperty
|
|
84
|
+
.WhereNotNull()
|
|
85
|
+
.Subscribe(plugin =>
|
|
86
|
+
{
|
|
87
|
+
callbackExecuted = true;
|
|
88
|
+
executionCount++;
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
try
|
|
92
|
+
{
|
|
93
|
+
for (int i = 0; !callbackExecuted && i < WaitTimeoutTicks; i++)
|
|
94
|
+
yield return null;
|
|
95
|
+
|
|
96
|
+
// Assert
|
|
97
|
+
Assert.IsTrue(executionCount >= 1, "PluginProperty callback should have executed at least once");
|
|
98
|
+
}
|
|
99
|
+
finally
|
|
100
|
+
{
|
|
101
|
+
subscription?.Dispose();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"Unity Skills",
|
|
16
16
|
"uco"
|
|
17
17
|
],
|
|
18
|
-
"version": "1.0.
|
|
18
|
+
"version": "1.0.6",
|
|
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;
|