@atelierai/uco 1.0.7 → 1.0.9
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 +29 -8
- package/package.json +2 -2
- package/vendor/plugin/com.atelierai.unity.copilot/CHANGELOG.md +4 -4
- 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/API/Tool/ToolGroups.SetEnabled.cs +92 -92
- 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 +887 -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/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 +22 -22
- 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/ToolGroupRegistry.cs +461 -460
- 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/Editor/UI/uss/CopilotPromptsWindow.uss +11 -11
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/UI/uss/CopilotResourcesWindow.uss +16 -16
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/UI/uss/CopilotToolsWindow.uss +36 -36
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/UI/uss/MainWindow.uss +183 -183
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/UI/uss/common/{_mcp-list-window.uss → _copilot-list-window.uss} +18 -18
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/UI/uss/common/_list-view.uss +77 -77
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/UI/uxml/CopilotPromptsWindow.uxml +18 -18
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/UI/uxml/CopilotResourcesWindow.uxml +18 -18
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/UI/uxml/CopilotToolsWindow.uxml +18 -18
- package/vendor/plugin/com.atelierai.unity.copilot/Editor/UI/uxml/MainWindow.uxml +115 -115
- 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/README.md +88 -88
- 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 +3 -3
- 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 +11 -11
- 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/NuGetExtractorDevelopmentDependencyTests.cs +148 -148
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/DependencyResolver/NuGetExtractorFlatLayoutTests.cs +166 -166
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/DependencyResolver/NuGetInstallManifestTests.cs +436 -436
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/DependencyResolver/NuGetLegacyMigrationTests.cs +304 -304
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/DependencyResolver/NuGetPackageInstallerStaleVersionCleanupTests.cs +200 -200
- package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Environment/EnvironmentUtilsTests.cs +2 -2
- 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/GameObject/TestJsonSchema.cs +199 -199
- 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/vendor/plugin/com.atelierai.unity.copilot/Editor/UI/uss/common/{_mcp-list-window.uss.meta → _copilot-list-window.uss.meta} +0 -0
- /package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/{McpPluginTests.cs.meta → UcoPluginTests.cs.meta} +0 -0
package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/MainWindowEditor.cs
CHANGED
|
@@ -1,79 +1,79 @@
|
|
|
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 com.AtelierAI.Unity.Copilot.Runtime.Utils;
|
|
14
|
-
using com.AtelierAI.Uco.Framework;
|
|
15
|
-
using R3;
|
|
16
|
-
using UnityEngine;
|
|
17
|
-
using UnityEngine.UIElements;
|
|
18
|
-
|
|
19
|
-
namespace com.AtelierAI.Unity.Copilot.Editor.UI
|
|
20
|
-
{
|
|
21
|
-
public partial class MainWindowEditor : CopilotWindowBase
|
|
22
|
-
{
|
|
23
|
-
readonly CompositeDisposable _disposables = new();
|
|
24
|
-
|
|
25
|
-
Button? _btnConnect;
|
|
26
|
-
VisualElement? _timelinePointUnity;
|
|
27
|
-
|
|
28
|
-
protected override string WindowTitle => "Unity Copilot";
|
|
29
|
-
protected override string[] WindowUxmlPaths => _windowUxmlPaths;
|
|
30
|
-
protected override string[] WindowUssPaths => _windowUssPaths;
|
|
31
|
-
|
|
32
|
-
public static MainWindowEditor ShowWindow()
|
|
33
|
-
{
|
|
34
|
-
var window = GetWindow<MainWindowEditor>("Unity Copilot");
|
|
35
|
-
window.SetupWindowWithIcon();
|
|
36
|
-
window.Focus();
|
|
37
|
-
|
|
38
|
-
return window;
|
|
39
|
-
}
|
|
40
|
-
public static void ShowWindowVoid() => ShowWindow();
|
|
41
|
-
|
|
42
|
-
public void Invalidate()
|
|
43
|
-
{
|
|
44
|
-
CreateGUI();
|
|
45
|
-
}
|
|
46
|
-
void OnValidate() => UnityCopilotPluginEditor.Instance.Validate();
|
|
47
|
-
|
|
48
|
-
private void SaveChanges(string message)
|
|
49
|
-
{
|
|
50
|
-
if (UnityCopilotPlugin.IsLogEnabled(LogLevel.Info))
|
|
51
|
-
Debug.Log(message);
|
|
52
|
-
|
|
53
|
-
saveChangesMessage = message;
|
|
54
|
-
|
|
55
|
-
base.SaveChanges();
|
|
56
|
-
UnityCopilotPluginEditor.Instance.Save();
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
private void OnChanged(UnityCopilotPlugin.UnityConnectionConfig data) => Repaint();
|
|
60
|
-
|
|
61
|
-
protected override void OnEnable()
|
|
62
|
-
{
|
|
63
|
-
base.OnEnable();
|
|
64
|
-
_disposables.Add(UnityCopilotPluginEditor.SubscribeOnChanged(OnChanged));
|
|
65
|
-
}
|
|
66
|
-
private void OnDisable()
|
|
67
|
-
{
|
|
68
|
-
_disposables.Clear();
|
|
69
|
-
_authRejectedSubscription.Dispose();
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
private static void UnityBuildAndConnect()
|
|
73
|
-
{
|
|
74
|
-
UnityCopilotPluginEditor.Instance.
|
|
75
|
-
UnityCopilotPluginEditor.Instance.AddUnityLogCollectorIfNeeded(() => new BufferedFileLogStorage());
|
|
76
|
-
UnityCopilotPluginEditor.ConnectIfNeeded();
|
|
77
|
-
}
|
|
78
|
-
}
|
|
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 com.AtelierAI.Unity.Copilot.Runtime.Utils;
|
|
14
|
+
using com.AtelierAI.Uco.Framework;
|
|
15
|
+
using R3;
|
|
16
|
+
using UnityEngine;
|
|
17
|
+
using UnityEngine.UIElements;
|
|
18
|
+
|
|
19
|
+
namespace com.AtelierAI.Unity.Copilot.Editor.UI
|
|
20
|
+
{
|
|
21
|
+
public partial class MainWindowEditor : CopilotWindowBase
|
|
22
|
+
{
|
|
23
|
+
readonly CompositeDisposable _disposables = new();
|
|
24
|
+
|
|
25
|
+
Button? _btnConnect;
|
|
26
|
+
VisualElement? _timelinePointUnity;
|
|
27
|
+
|
|
28
|
+
protected override string WindowTitle => "Unity Copilot";
|
|
29
|
+
protected override string[] WindowUxmlPaths => _windowUxmlPaths;
|
|
30
|
+
protected override string[] WindowUssPaths => _windowUssPaths;
|
|
31
|
+
|
|
32
|
+
public static MainWindowEditor ShowWindow()
|
|
33
|
+
{
|
|
34
|
+
var window = GetWindow<MainWindowEditor>("Unity Copilot");
|
|
35
|
+
window.SetupWindowWithIcon();
|
|
36
|
+
window.Focus();
|
|
37
|
+
|
|
38
|
+
return window;
|
|
39
|
+
}
|
|
40
|
+
public static void ShowWindowVoid() => ShowWindow();
|
|
41
|
+
|
|
42
|
+
public void Invalidate()
|
|
43
|
+
{
|
|
44
|
+
CreateGUI();
|
|
45
|
+
}
|
|
46
|
+
void OnValidate() => UnityCopilotPluginEditor.Instance.Validate();
|
|
47
|
+
|
|
48
|
+
private void SaveChanges(string message)
|
|
49
|
+
{
|
|
50
|
+
if (UnityCopilotPlugin.IsLogEnabled(LogLevel.Info))
|
|
51
|
+
Debug.Log(message);
|
|
52
|
+
|
|
53
|
+
saveChangesMessage = message;
|
|
54
|
+
|
|
55
|
+
base.SaveChanges();
|
|
56
|
+
UnityCopilotPluginEditor.Instance.Save();
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
private void OnChanged(UnityCopilotPlugin.UnityConnectionConfig data) => Repaint();
|
|
60
|
+
|
|
61
|
+
protected override void OnEnable()
|
|
62
|
+
{
|
|
63
|
+
base.OnEnable();
|
|
64
|
+
_disposables.Add(UnityCopilotPluginEditor.SubscribeOnChanged(OnChanged));
|
|
65
|
+
}
|
|
66
|
+
private void OnDisable()
|
|
67
|
+
{
|
|
68
|
+
_disposables.Clear();
|
|
69
|
+
_authRejectedSubscription.Dispose();
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
private static void UnityBuildAndConnect()
|
|
73
|
+
{
|
|
74
|
+
UnityCopilotPluginEditor.Instance.BuildUcoPluginIfNeeded();
|
|
75
|
+
UnityCopilotPluginEditor.Instance.AddUnityLogCollectorIfNeeded(() => new BufferedFileLogStorage());
|
|
76
|
+
UnityCopilotPluginEditor.ConnectIfNeeded();
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
79
|
}
|
package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/MainWindowInitializer.cs
CHANGED
|
@@ -1,47 +1,47 @@
|
|
|
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 com.AtelierAI.Unity.Copilot.Editor.Utils;
|
|
13
|
-
using UnityEditor;
|
|
14
|
-
|
|
15
|
-
namespace com.AtelierAI.Unity.Copilot.Editor.UI
|
|
16
|
-
{
|
|
17
|
-
[InitializeOnLoad]
|
|
18
|
-
static class MainWindowInitializer
|
|
19
|
-
{
|
|
20
|
-
static PlayerPrefsBool isInitialized = new PlayerPrefsBool("Unity-
|
|
21
|
-
|
|
22
|
-
static MainWindowInitializer()
|
|
23
|
-
{
|
|
24
|
-
if (!UnityProcessGuard.ShouldInitialize(AssetDatabase.IsAssetImportWorkerProcess()))
|
|
25
|
-
return;
|
|
26
|
-
|
|
27
|
-
if (isInitialized.Value)
|
|
28
|
-
return;
|
|
29
|
-
|
|
30
|
-
EditorApplication.update += PerformInitialization;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
static void PerformInitialization()
|
|
34
|
-
{
|
|
35
|
-
EditorApplication.update -= PerformInitialization;
|
|
36
|
-
|
|
37
|
-
if (isInitialized.Value)
|
|
38
|
-
return;
|
|
39
|
-
|
|
40
|
-
// Perform initialization
|
|
41
|
-
UnityCopilotPluginEditor.InitSingletonIfNeeded();
|
|
42
|
-
MainWindowEditor.ShowWindow();
|
|
43
|
-
|
|
44
|
-
isInitialized.Value = true;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
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 com.AtelierAI.Unity.Copilot.Editor.Utils;
|
|
13
|
+
using UnityEditor;
|
|
14
|
+
|
|
15
|
+
namespace com.AtelierAI.Unity.Copilot.Editor.UI
|
|
16
|
+
{
|
|
17
|
+
[InitializeOnLoad]
|
|
18
|
+
static class MainWindowInitializer
|
|
19
|
+
{
|
|
20
|
+
static PlayerPrefsBool isInitialized = new PlayerPrefsBool("Unity-Uco.MainWindow.Initialized");
|
|
21
|
+
|
|
22
|
+
static MainWindowInitializer()
|
|
23
|
+
{
|
|
24
|
+
if (!UnityProcessGuard.ShouldInitialize(AssetDatabase.IsAssetImportWorkerProcess()))
|
|
25
|
+
return;
|
|
26
|
+
|
|
27
|
+
if (isInitialized.Value)
|
|
28
|
+
return;
|
|
29
|
+
|
|
30
|
+
EditorApplication.update += PerformInitialization;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
static void PerformInitialization()
|
|
34
|
+
{
|
|
35
|
+
EditorApplication.update -= PerformInitialization;
|
|
36
|
+
|
|
37
|
+
if (isInitialized.Value)
|
|
38
|
+
return;
|
|
39
|
+
|
|
40
|
+
// Perform initialization
|
|
41
|
+
UnityCopilotPluginEditor.InitSingletonIfNeeded();
|
|
42
|
+
MainWindowEditor.ShowWindow();
|
|
43
|
+
|
|
44
|
+
isInitialized.Value = true;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -1,190 +1,190 @@
|
|
|
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
|
-
|
|
13
|
-
using System;
|
|
14
|
-
using System.Collections.Generic;
|
|
15
|
-
using System.Diagnostics;
|
|
16
|
-
using com.AtelierAI.Uco.Framework.Common.Utils;
|
|
17
|
-
using com.IvanMurzak.ReflectorNet;
|
|
18
|
-
using com.AtelierAI.Unity.Copilot.Editor.Utils;
|
|
19
|
-
using com.AtelierAI.Unity.Copilot.Utils;
|
|
20
|
-
using Microsoft.Extensions.Logging;
|
|
21
|
-
using UnityEditor;
|
|
22
|
-
using UnityEditor.UIElements;
|
|
23
|
-
using UnityEngine;
|
|
24
|
-
using UnityEngine.UIElements;
|
|
25
|
-
|
|
26
|
-
namespace com.AtelierAI.Unity.Copilot.Editor.UI
|
|
27
|
-
{
|
|
28
|
-
/// <summary>
|
|
29
|
-
/// An editor window for testing object serialization using the
|
|
30
|
-
/// </summary>
|
|
31
|
-
public class SerializationCheckWindow : CopilotWindowBase
|
|
32
|
-
{
|
|
33
|
-
private static readonly string[] _windowUxmlPaths = EditorAssetLoader.GetEditorAssetPaths("Editor/UI/uxml/SerializationCheckWindow.uxml");
|
|
34
|
-
private static readonly string[] _windowUssPaths = EditorAssetLoader.GetEditorAssetPaths("Editor/UI/uss/SerializationCheckWindow.uss");
|
|
35
|
-
|
|
36
|
-
protected override string[] WindowUxmlPaths => _windowUxmlPaths;
|
|
37
|
-
protected override string[] WindowUssPaths => _windowUssPaths;
|
|
38
|
-
protected override string WindowTitle => "Serialization Check";
|
|
39
|
-
|
|
40
|
-
private ObjectField? targetField;
|
|
41
|
-
private Toggle? recursiveToggle;
|
|
42
|
-
private Button? serializeButton;
|
|
43
|
-
private Button? copyButton;
|
|
44
|
-
private Label? outputHeader;
|
|
45
|
-
private ListView? outputList;
|
|
46
|
-
private readonly List<string> outputLines = new();
|
|
47
|
-
private string fullOutputText = string.Empty;
|
|
48
|
-
|
|
49
|
-
public static void ShowWindow()
|
|
50
|
-
{
|
|
51
|
-
var window = GetWindow<SerializationCheckWindow>(utility: false, "Serialization Check", focus: true);
|
|
52
|
-
window.SetupWindowWithIcon();
|
|
53
|
-
window.minSize = new Vector2(400, 500);
|
|
54
|
-
window.Show();
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
protected override void OnGUICreated(VisualElement root)
|
|
58
|
-
{
|
|
59
|
-
BindUI(root);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
private void BindUI(VisualElement root)
|
|
63
|
-
{
|
|
64
|
-
// Bind target object field
|
|
65
|
-
targetField = root.Q<ObjectField>("target-field");
|
|
66
|
-
if (targetField == null)
|
|
67
|
-
throw new InvalidOperationException("target-field ObjectField not found in UXML");
|
|
68
|
-
targetField.objectType = typeof(UnityEngine.Object);
|
|
69
|
-
|
|
70
|
-
// Bind recursive toggle
|
|
71
|
-
recursiveToggle = root.Q<Toggle>("recursive-toggle");
|
|
72
|
-
if (recursiveToggle == null)
|
|
73
|
-
throw new InvalidOperationException("recursive-toggle Toggle not found in UXML");
|
|
74
|
-
|
|
75
|
-
// Bind serialize button
|
|
76
|
-
serializeButton = root.Q<Button>("btn-serialize");
|
|
77
|
-
if (serializeButton == null)
|
|
78
|
-
throw new InvalidOperationException("btn-serialize Button not found in UXML");
|
|
79
|
-
serializeButton.clicked += OnSerializeClicked;
|
|
80
|
-
|
|
81
|
-
// Bind copy button
|
|
82
|
-
copyButton = root.Q<Button>("btn-copy");
|
|
83
|
-
if (copyButton == null)
|
|
84
|
-
throw new InvalidOperationException("btn-copy Button not found in UXML");
|
|
85
|
-
copyButton.clicked += OnCopyClicked;
|
|
86
|
-
|
|
87
|
-
// Bind output header
|
|
88
|
-
outputHeader = root.Q<Label>("output-header");
|
|
89
|
-
if (outputHeader == null)
|
|
90
|
-
throw new InvalidOperationException("output-header Label not found in UXML");
|
|
91
|
-
|
|
92
|
-
// Bind output list
|
|
93
|
-
outputList = root.Q<ListView>("output-list");
|
|
94
|
-
if (outputList == null)
|
|
95
|
-
throw new InvalidOperationException("output-list ListView not found in UXML");
|
|
96
|
-
|
|
97
|
-
outputList.itemsSource = outputLines;
|
|
98
|
-
outputList.virtualizationMethod = CollectionVirtualizationMethod.DynamicHeight;
|
|
99
|
-
outputList.makeItem = () =>
|
|
100
|
-
{
|
|
101
|
-
var label = new Label();
|
|
102
|
-
label.AddToClassList("json-text-line");
|
|
103
|
-
return label;
|
|
104
|
-
};
|
|
105
|
-
outputList.bindItem = (element, index) =>
|
|
106
|
-
{
|
|
107
|
-
if (element is Label label && index < outputLines.Count)
|
|
108
|
-
label.text = outputLines[index];
|
|
109
|
-
};
|
|
110
|
-
outputList.selectionType = SelectionType.None;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
private void OnSerializeClicked()
|
|
114
|
-
{
|
|
115
|
-
if (targetField == null || recursiveToggle == null || outputList == null || outputHeader == null)
|
|
116
|
-
return;
|
|
117
|
-
|
|
118
|
-
var target = targetField.value;
|
|
119
|
-
var recursive = recursiveToggle.value;
|
|
120
|
-
|
|
121
|
-
try
|
|
122
|
-
{
|
|
123
|
-
var logger = UnityLoggerFactory.LoggerFactory.CreateLogger(nameof(SerializationCheckWindow));
|
|
124
|
-
var reflector = UnityCopilotPluginEditor.Instance.Reflector ?? throw new InvalidOperationException("Reflector is null");
|
|
125
|
-
|
|
126
|
-
logger.LogInformation($"Serializing target '{target?.name}' of type '{target?.GetType().GetTypeId()}' with recursive={recursive}");
|
|
127
|
-
|
|
128
|
-
var stopwatch = Stopwatch.StartNew();
|
|
129
|
-
|
|
130
|
-
var serialized = reflector.Serialize(
|
|
131
|
-
obj: target,
|
|
132
|
-
fallbackType: null,
|
|
133
|
-
name: target?.name,
|
|
134
|
-
recursive: recursive,
|
|
135
|
-
context: null,
|
|
136
|
-
logger: logger);
|
|
137
|
-
|
|
138
|
-
var json = serialized.ToPrettyJson();
|
|
139
|
-
|
|
140
|
-
stopwatch.Stop();
|
|
141
|
-
|
|
142
|
-
logger.LogInformation(json);
|
|
143
|
-
|
|
144
|
-
outputHeader.text = $"Output ({stopwatch.ElapsedMilliseconds}ms)";
|
|
145
|
-
SetOutput(json);
|
|
146
|
-
}
|
|
147
|
-
catch (Exception ex)
|
|
148
|
-
{
|
|
149
|
-
outputHeader.text = "Output";
|
|
150
|
-
SetOutput($"Error: {ex.Message}\n\n{ex.StackTrace}");
|
|
151
|
-
Logger.LogError(ex, "Failed to serialize target");
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
private void SetOutput(string text)
|
|
156
|
-
{
|
|
157
|
-
fullOutputText = text;
|
|
158
|
-
outputLines.Clear();
|
|
159
|
-
outputLines.AddRange(text.Split('\n'));
|
|
160
|
-
outputList?.RefreshItems();
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
private void OnCopyClicked()
|
|
164
|
-
{
|
|
165
|
-
EditorGUIUtility.systemCopyBuffer = fullOutputText;
|
|
166
|
-
|
|
167
|
-
if (copyButton != null)
|
|
168
|
-
{
|
|
169
|
-
var originalText = copyButton.text;
|
|
170
|
-
copyButton.text = "Copied!";
|
|
171
|
-
|
|
172
|
-
copyButton.schedule.Execute(() =>
|
|
173
|
-
{
|
|
174
|
-
if (copyButton != null)
|
|
175
|
-
{
|
|
176
|
-
copyButton.text = originalText;
|
|
177
|
-
}
|
|
178
|
-
}).ExecuteLater(1500);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
private void OnDestroy()
|
|
183
|
-
{
|
|
184
|
-
if (serializeButton != null)
|
|
185
|
-
serializeButton.clicked -= OnSerializeClicked;
|
|
186
|
-
if (copyButton != null)
|
|
187
|
-
copyButton.clicked -= OnCopyClicked;
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
}
|
|
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
|
+
|
|
13
|
+
using System;
|
|
14
|
+
using System.Collections.Generic;
|
|
15
|
+
using System.Diagnostics;
|
|
16
|
+
using com.AtelierAI.Uco.Framework.Common.Utils;
|
|
17
|
+
using com.IvanMurzak.ReflectorNet;
|
|
18
|
+
using com.AtelierAI.Unity.Copilot.Editor.Utils;
|
|
19
|
+
using com.AtelierAI.Unity.Copilot.Utils;
|
|
20
|
+
using Microsoft.Extensions.Logging;
|
|
21
|
+
using UnityEditor;
|
|
22
|
+
using UnityEditor.UIElements;
|
|
23
|
+
using UnityEngine;
|
|
24
|
+
using UnityEngine.UIElements;
|
|
25
|
+
|
|
26
|
+
namespace com.AtelierAI.Unity.Copilot.Editor.UI
|
|
27
|
+
{
|
|
28
|
+
/// <summary>
|
|
29
|
+
/// An editor window for testing object serialization using the Uco reflector.
|
|
30
|
+
/// </summary>
|
|
31
|
+
public class SerializationCheckWindow : CopilotWindowBase
|
|
32
|
+
{
|
|
33
|
+
private static readonly string[] _windowUxmlPaths = EditorAssetLoader.GetEditorAssetPaths("Editor/UI/uxml/SerializationCheckWindow.uxml");
|
|
34
|
+
private static readonly string[] _windowUssPaths = EditorAssetLoader.GetEditorAssetPaths("Editor/UI/uss/SerializationCheckWindow.uss");
|
|
35
|
+
|
|
36
|
+
protected override string[] WindowUxmlPaths => _windowUxmlPaths;
|
|
37
|
+
protected override string[] WindowUssPaths => _windowUssPaths;
|
|
38
|
+
protected override string WindowTitle => "Serialization Check";
|
|
39
|
+
|
|
40
|
+
private ObjectField? targetField;
|
|
41
|
+
private Toggle? recursiveToggle;
|
|
42
|
+
private Button? serializeButton;
|
|
43
|
+
private Button? copyButton;
|
|
44
|
+
private Label? outputHeader;
|
|
45
|
+
private ListView? outputList;
|
|
46
|
+
private readonly List<string> outputLines = new();
|
|
47
|
+
private string fullOutputText = string.Empty;
|
|
48
|
+
|
|
49
|
+
public static void ShowWindow()
|
|
50
|
+
{
|
|
51
|
+
var window = GetWindow<SerializationCheckWindow>(utility: false, "Serialization Check", focus: true);
|
|
52
|
+
window.SetupWindowWithIcon();
|
|
53
|
+
window.minSize = new Vector2(400, 500);
|
|
54
|
+
window.Show();
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
protected override void OnGUICreated(VisualElement root)
|
|
58
|
+
{
|
|
59
|
+
BindUI(root);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
private void BindUI(VisualElement root)
|
|
63
|
+
{
|
|
64
|
+
// Bind target object field
|
|
65
|
+
targetField = root.Q<ObjectField>("target-field");
|
|
66
|
+
if (targetField == null)
|
|
67
|
+
throw new InvalidOperationException("target-field ObjectField not found in UXML");
|
|
68
|
+
targetField.objectType = typeof(UnityEngine.Object);
|
|
69
|
+
|
|
70
|
+
// Bind recursive toggle
|
|
71
|
+
recursiveToggle = root.Q<Toggle>("recursive-toggle");
|
|
72
|
+
if (recursiveToggle == null)
|
|
73
|
+
throw new InvalidOperationException("recursive-toggle Toggle not found in UXML");
|
|
74
|
+
|
|
75
|
+
// Bind serialize button
|
|
76
|
+
serializeButton = root.Q<Button>("btn-serialize");
|
|
77
|
+
if (serializeButton == null)
|
|
78
|
+
throw new InvalidOperationException("btn-serialize Button not found in UXML");
|
|
79
|
+
serializeButton.clicked += OnSerializeClicked;
|
|
80
|
+
|
|
81
|
+
// Bind copy button
|
|
82
|
+
copyButton = root.Q<Button>("btn-copy");
|
|
83
|
+
if (copyButton == null)
|
|
84
|
+
throw new InvalidOperationException("btn-copy Button not found in UXML");
|
|
85
|
+
copyButton.clicked += OnCopyClicked;
|
|
86
|
+
|
|
87
|
+
// Bind output header
|
|
88
|
+
outputHeader = root.Q<Label>("output-header");
|
|
89
|
+
if (outputHeader == null)
|
|
90
|
+
throw new InvalidOperationException("output-header Label not found in UXML");
|
|
91
|
+
|
|
92
|
+
// Bind output list
|
|
93
|
+
outputList = root.Q<ListView>("output-list");
|
|
94
|
+
if (outputList == null)
|
|
95
|
+
throw new InvalidOperationException("output-list ListView not found in UXML");
|
|
96
|
+
|
|
97
|
+
outputList.itemsSource = outputLines;
|
|
98
|
+
outputList.virtualizationMethod = CollectionVirtualizationMethod.DynamicHeight;
|
|
99
|
+
outputList.makeItem = () =>
|
|
100
|
+
{
|
|
101
|
+
var label = new Label();
|
|
102
|
+
label.AddToClassList("json-text-line");
|
|
103
|
+
return label;
|
|
104
|
+
};
|
|
105
|
+
outputList.bindItem = (element, index) =>
|
|
106
|
+
{
|
|
107
|
+
if (element is Label label && index < outputLines.Count)
|
|
108
|
+
label.text = outputLines[index];
|
|
109
|
+
};
|
|
110
|
+
outputList.selectionType = SelectionType.None;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
private void OnSerializeClicked()
|
|
114
|
+
{
|
|
115
|
+
if (targetField == null || recursiveToggle == null || outputList == null || outputHeader == null)
|
|
116
|
+
return;
|
|
117
|
+
|
|
118
|
+
var target = targetField.value;
|
|
119
|
+
var recursive = recursiveToggle.value;
|
|
120
|
+
|
|
121
|
+
try
|
|
122
|
+
{
|
|
123
|
+
var logger = UnityLoggerFactory.LoggerFactory.CreateLogger(nameof(SerializationCheckWindow));
|
|
124
|
+
var reflector = UnityCopilotPluginEditor.Instance.Reflector ?? throw new InvalidOperationException("Reflector is null");
|
|
125
|
+
|
|
126
|
+
logger.LogInformation($"Serializing target '{target?.name}' of type '{target?.GetType().GetTypeId()}' with recursive={recursive}");
|
|
127
|
+
|
|
128
|
+
var stopwatch = Stopwatch.StartNew();
|
|
129
|
+
|
|
130
|
+
var serialized = reflector.Serialize(
|
|
131
|
+
obj: target,
|
|
132
|
+
fallbackType: null,
|
|
133
|
+
name: target?.name,
|
|
134
|
+
recursive: recursive,
|
|
135
|
+
context: null,
|
|
136
|
+
logger: logger);
|
|
137
|
+
|
|
138
|
+
var json = serialized.ToPrettyJson();
|
|
139
|
+
|
|
140
|
+
stopwatch.Stop();
|
|
141
|
+
|
|
142
|
+
logger.LogInformation(json);
|
|
143
|
+
|
|
144
|
+
outputHeader.text = $"Output ({stopwatch.ElapsedMilliseconds}ms)";
|
|
145
|
+
SetOutput(json);
|
|
146
|
+
}
|
|
147
|
+
catch (Exception ex)
|
|
148
|
+
{
|
|
149
|
+
outputHeader.text = "Output";
|
|
150
|
+
SetOutput($"Error: {ex.Message}\n\n{ex.StackTrace}");
|
|
151
|
+
Logger.LogError(ex, "Failed to serialize target");
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
private void SetOutput(string text)
|
|
156
|
+
{
|
|
157
|
+
fullOutputText = text;
|
|
158
|
+
outputLines.Clear();
|
|
159
|
+
outputLines.AddRange(text.Split('\n'));
|
|
160
|
+
outputList?.RefreshItems();
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
private void OnCopyClicked()
|
|
164
|
+
{
|
|
165
|
+
EditorGUIUtility.systemCopyBuffer = fullOutputText;
|
|
166
|
+
|
|
167
|
+
if (copyButton != null)
|
|
168
|
+
{
|
|
169
|
+
var originalText = copyButton.text;
|
|
170
|
+
copyButton.text = "Copied!";
|
|
171
|
+
|
|
172
|
+
copyButton.schedule.Execute(() =>
|
|
173
|
+
{
|
|
174
|
+
if (copyButton != null)
|
|
175
|
+
{
|
|
176
|
+
copyButton.text = originalText;
|
|
177
|
+
}
|
|
178
|
+
}).ExecuteLater(1500);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
private void OnDestroy()
|
|
183
|
+
{
|
|
184
|
+
if (serializeButton != null)
|
|
185
|
+
serializeButton.clicked -= OnSerializeClicked;
|
|
186
|
+
if (copyButton != null)
|
|
187
|
+
copyButton.clicked -= OnCopyClicked;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|