@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.
Files changed (280) hide show
  1. package/CHANGELOG.md +32 -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/DependencyResolver/NuGetConfig.cs +132 -132
  131. package/vendor/plugin/com.atelierai.unity.copilot/Editor/DependencyResolver/NuGetDependencyResolver.cs +237 -237
  132. package/vendor/plugin/com.atelierai.unity.copilot/Editor/DependencyResolver/NuGetDownloader.cs +82 -82
  133. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Resource/MenuItems.cs +247 -247
  134. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Resource/ToolGroups.cs +153 -153
  135. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/SystemTool/Skills.Create.SkillBody.cs +155 -155
  136. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Tool/Console.GetLogs.cs +95 -95
  137. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Tool/Docs.HttpFetcher.cs +139 -139
  138. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Tool/Instance.ListAll.cs +72 -72
  139. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Tool/PathReadHelper.cs +106 -106
  140. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Tool/Script.Validate.cs +252 -252
  141. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Tool/Tests/TestResultCollector.cs +537 -537
  142. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/API/Tool/Tests.cs +400 -400
  143. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Branding/ProductInfo.cs +62 -62
  144. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/CopilotServerManager.cs +1034 -1034
  145. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Skills/Skill_InitialSetup.cs +197 -197
  146. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Startup.Editor.cs +201 -201
  147. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Startup.cs +67 -67
  148. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Components/ExtensionPanel.cs +379 -379
  149. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/MenuItems.cs +72 -72
  150. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/UnityCopilotProjectSettingsProvider.cs +64 -64
  151. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/CopilotListWindowBase.cs +393 -393
  152. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/CopilotWindowBase.cs +113 -113
  153. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/MainWindowEditor.Connection.cs +3 -3
  154. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/MainWindowEditor.CopilotFeatures.cs +195 -195
  155. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/MainWindowEditor.CopilotServer.cs +372 -372
  156. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/MainWindowEditor.CreateGUI.cs +354 -354
  157. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/MainWindowEditor.cs +78 -78
  158. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/MainWindowInitializer.cs +47 -47
  159. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UI/Window/SerializationCheckWindow.cs +190 -190
  160. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UnityCopilotPluginEditor.Build.cs +91 -91
  161. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UnityCopilotPluginEditor.Config.cs +298 -298
  162. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UnityCopilotPluginEditor.Static.cs +296 -296
  163. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/UnityCopilotPluginEditor.cs +69 -69
  164. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/PackageUtils.cs +168 -168
  165. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/PrefsKeyMigration.cs +119 -119
  166. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/SafeDefaultsGuard.cs +180 -180
  167. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/ScriptUtils.cs +229 -229
  168. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/ToolsManifestGenerator.cs +200 -200
  169. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/UnityAuthoringAdapters.cs +1467 -1467
  170. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/UnityAuthoringSafetyReloadGuard.cs +65 -65
  171. package/vendor/plugin/com.atelierai.unity.copilot/Editor/Scripts/Utils/UnityCopilotUpdateProjectSettings.cs +66 -66
  172. package/vendor/plugin/com.atelierai.unity.copilot/Plugins/ReflectorNet.dll +0 -0
  173. package/vendor/plugin/com.atelierai.unity.copilot/Plugins/Uco.Framework.Common.dll +0 -0
  174. package/vendor/plugin/com.atelierai.unity.copilot/Plugins/Uco.Framework.dll +0 -0
  175. package/vendor/plugin/com.atelierai.unity.copilot/Runtime/Converter/Json/Structures/EntityIdConverter.cs +120 -120
  176. package/vendor/plugin/com.atelierai.unity.copilot/Runtime/Data/GameObjectMetadata.cs +110 -110
  177. package/vendor/plugin/com.atelierai.unity.copilot/Runtime/Data/GameObjectMetadata.pre-Unity.6.5.cs +110 -110
  178. package/vendor/plugin/com.atelierai.unity.copilot/Runtime/Unity/Logs/FileLogStorage.cs +547 -547
  179. package/vendor/plugin/com.atelierai.unity.copilot/Runtime/UnityCopilotPlugin.Build.cs +243 -243
  180. package/vendor/plugin/com.atelierai.unity.copilot/Runtime/UnityCopilotPlugin.Config.cs +175 -175
  181. package/vendor/plugin/com.atelierai.unity.copilot/Runtime/UnityCopilotPlugin.cs +295 -295
  182. package/vendor/plugin/com.atelierai.unity.copilot/Runtime/UnityCopilotPluginBuilder.cs +105 -105
  183. package/vendor/plugin/com.atelierai.unity.copilot/Runtime/UnityCopilotPluginRuntime.Static.cs +155 -155
  184. package/vendor/plugin/com.atelierai.unity.copilot/Runtime/UnityCopilotPluginRuntime.cs +59 -59
  185. package/vendor/plugin/com.atelierai.unity.copilot/Runtime/Utils/EnvironmentUtils.cs +368 -368
  186. package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/AtomicApi/AtomicApiTestFixtures.cs +99 -99
  187. package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/AtomicApi/TryModifyAtTests.cs +227 -227
  188. package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/AuthoringSafetyPilotTests.cs +1050 -1050
  189. package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/DependencyResolver/NuGetLegacyMigrationTests.cs +304 -304
  190. package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Environment/EnvironmentUtilsTests.cs +4 -4
  191. package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/BlacklistTypeTests.cs +416 -416
  192. package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/DataFieldScriptableObjectPopulationTests.cs +172 -172
  193. package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/DataFieldScriptableObjectPopulationTests.pre-Unity.6.5.cs +169 -169
  194. package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/DataPopulationTests.cs +182 -182
  195. package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/DataPopulationTests.pre-Unity.6.5.cs +179 -179
  196. package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/DataPropertyPopulationTests.cs +175 -175
  197. package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/DataPropertyPopulationTests.pre-Unity.6.5.cs +174 -174
  198. package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/DataPropertyScriptableObjectPopulationTests.cs +171 -171
  199. package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ReflectionConverter/DataPropertyScriptableObjectPopulationTests.pre-Unity.6.5.cs +170 -170
  200. package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Assets/AssetsCreateFolderTests.cs +243 -243
  201. package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Assets/AssetsMaterialTests.cs +101 -101
  202. package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Assets/AssetsPrefabCreateTests.cs +348 -348
  203. package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Assets/AssetsPrefabCreateTests.pre-Unity.6.5.cs +348 -348
  204. package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Assets/AssetsShaderTests.cs +194 -194
  205. package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/PathBasedToolTests.cs +573 -573
  206. package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/PathBasedToolTests.pre-Unity.6.5.cs +513 -513
  207. package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Screenshot/ScreenshotCameraTests.cs +154 -154
  208. package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Screenshot/ScreenshotCameraTests.pre-Unity.6.5.cs +154 -154
  209. package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Screenshot/ScreenshotGameViewTests.cs +164 -164
  210. package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/Screenshot/ScreenshotSceneViewTests.cs +155 -155
  211. package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/ToolParameterTests.cs +56 -56
  212. package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/ToolThreadSafetyTests.cs +651 -651
  213. package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/Tool/ToolThreadSafetyTests.pre-Unity.6.5.cs +651 -651
  214. package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/ToolBatchExecutionIntegrationTests.cs +407 -407
  215. package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/{McpPluginTests.cs → UcoPluginTests.cs} +105 -105
  216. package/vendor/plugin/com.atelierai.unity.copilot/package.json +1 -1
  217. package/dist/commands/devops/login.d.ts +0 -2
  218. package/dist/commands/devops/login.js +0 -29
  219. package/dist/commands/devops/login.js.map +0 -1
  220. package/dist/commands/devops/setup-mcp.d.ts +0 -2
  221. package/dist/commands/devops/setup-mcp.js +0 -41
  222. package/dist/commands/devops/setup-mcp.js.map +0 -1
  223. package/dist/devops/commands-upstream/bootstrap-local.d.ts +0 -17
  224. package/dist/devops/commands-upstream/bootstrap-local.js +0 -87
  225. package/dist/devops/commands-upstream/bootstrap-local.js.map +0 -1
  226. package/dist/devops/commands-upstream/close.d.ts +0 -57
  227. package/dist/devops/commands-upstream/close.js +0 -188
  228. package/dist/devops/commands-upstream/close.js.map +0 -1
  229. package/dist/devops/commands-upstream/configure.d.ts +0 -2
  230. package/dist/devops/commands-upstream/configure.js +0 -87
  231. package/dist/devops/commands-upstream/configure.js.map +0 -1
  232. package/dist/devops/commands-upstream/create-project.d.ts +0 -2
  233. package/dist/devops/commands-upstream/create-project.js +0 -43
  234. package/dist/devops/commands-upstream/create-project.js.map +0 -1
  235. package/dist/devops/commands-upstream/install-plugin.d.ts +0 -2
  236. package/dist/devops/commands-upstream/install-plugin.js +0 -64
  237. package/dist/devops/commands-upstream/install-plugin.js.map +0 -1
  238. package/dist/devops/commands-upstream/install-unity.d.ts +0 -2
  239. package/dist/devops/commands-upstream/install-unity.js +0 -72
  240. package/dist/devops/commands-upstream/install-unity.js.map +0 -1
  241. package/dist/devops/commands-upstream/login.d.ts +0 -2
  242. package/dist/devops/commands-upstream/login.js +0 -33
  243. package/dist/devops/commands-upstream/login.js.map +0 -1
  244. package/dist/devops/commands-upstream/open.d.ts +0 -32
  245. package/dist/devops/commands-upstream/open.js +0 -282
  246. package/dist/devops/commands-upstream/open.js.map +0 -1
  247. package/dist/devops/commands-upstream/remove-plugin.d.ts +0 -2
  248. package/dist/devops/commands-upstream/remove-plugin.js +0 -41
  249. package/dist/devops/commands-upstream/remove-plugin.js.map +0 -1
  250. package/dist/devops/commands-upstream/run-system-tool.d.ts +0 -1
  251. package/dist/devops/commands-upstream/run-system-tool.js +0 -13
  252. package/dist/devops/commands-upstream/run-system-tool.js.map +0 -1
  253. package/dist/devops/commands-upstream/run-tool-builder.d.ts +0 -25
  254. package/dist/devops/commands-upstream/run-tool-builder.js +0 -125
  255. package/dist/devops/commands-upstream/run-tool-builder.js.map +0 -1
  256. package/dist/devops/commands-upstream/run-tool.d.ts +0 -1
  257. package/dist/devops/commands-upstream/run-tool.js +0 -13
  258. package/dist/devops/commands-upstream/run-tool.js.map +0 -1
  259. package/dist/devops/commands-upstream/setup-mcp.d.ts +0 -2
  260. package/dist/devops/commands-upstream/setup-mcp.js +0 -68
  261. package/dist/devops/commands-upstream/setup-mcp.js.map +0 -1
  262. package/dist/devops/commands-upstream/setup-skills.d.ts +0 -2
  263. package/dist/devops/commands-upstream/setup-skills.js +0 -167
  264. package/dist/devops/commands-upstream/setup-skills.js.map +0 -1
  265. package/dist/devops/commands-upstream/status.d.ts +0 -2
  266. package/dist/devops/commands-upstream/status.js +0 -87
  267. package/dist/devops/commands-upstream/status.js.map +0 -1
  268. package/dist/devops/commands-upstream/update.d.ts +0 -2
  269. package/dist/devops/commands-upstream/update.js +0 -77
  270. package/dist/devops/commands-upstream/update.js.map +0 -1
  271. package/dist/devops/commands-upstream/wait-for-ready.d.ts +0 -2
  272. package/dist/devops/commands-upstream/wait-for-ready.js +0 -93
  273. package/dist/devops/commands-upstream/wait-for-ready.js.map +0 -1
  274. package/dist/devops/lib/setup-mcp.d.ts +0 -35
  275. package/dist/devops/lib/setup-mcp.js +0 -177
  276. package/dist/devops/lib/setup-mcp.js.map +0 -1
  277. package/dist/devops/utils/cloud-login.d.ts +0 -7
  278. package/dist/devops/utils/cloud-login.js +0 -56
  279. package/dist/devops/utils/cloud-login.js.map +0 -1
  280. /package/vendor/plugin/com.atelierai.unity.copilot/Tests/Editor/{McpPluginTests.cs.meta → UcoPluginTests.cs.meta} +0 -0
@@ -1,416 +1,416 @@
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 System.Linq;
14
- using com.IvanMurzak.ReflectorNet;
15
- using com.IvanMurzak.ReflectorNet.Model;
16
- using com.IvanMurzak.ReflectorNet.Utils;
17
- using com.AtelierAI.Unity.Copilot.Editor.Tests.Utils;
18
- using com.AtelierAI.Unity.Copilot.TestFiles;
19
- using NUnit.Framework;
20
- using UnityEngine;
21
- using UnityEngine.TestTools;
22
-
23
- namespace com.AtelierAI.Unity.Copilot.Editor.Tests
24
- {
25
- /// <summary>
26
- /// Tests to verify that blacklisted types are excluded from serialization.
27
- /// </summary>
28
- public class BlacklistTypeTests : BaseTest
29
- {
30
- [UnitySetUp]
31
- public override IEnumerator SetUp() => base.SetUp();
32
-
33
- [UnityTearDown]
34
- public override IEnumerator TearDown() => base.TearDown();
35
-
36
- /// <summary>
37
- /// Creates a new Reflector configured similarly to UnityCopilotPluginEditor.CreateDefaultReflector()
38
- /// but with custom blacklisted types for testing.
39
- /// </summary>
40
- private Reflector CreateTestReflector()
41
- {
42
- return UnityCopilotPluginEditor.Instance.CreateDefaultReflector();
43
- }
44
-
45
- [UnityTest]
46
- public IEnumerator Serialize_Component_WithBlacklistedType_Field_ShouldNotContainBlacklistedField()
47
- {
48
- // Arrange
49
- var reflector = CreateTestReflector();
50
-
51
- // Blacklist the test types
52
- reflector.Converters.BlacklistType(typeof(BlacklistedType));
53
-
54
- // Create a GameObject with the test component
55
- var go = new GameObject("TestGameObject_Blacklist");
56
- var component = go.AddComponent<BlacklistTestScript>();
57
-
58
- // Set values on the component
59
- component.normalIntField = 42;
60
- component.normalStringField = "Hello World";
61
- component.normalVectorField = new Vector3(1, 2, 3);
62
- component.blacklistedTypeField = new BlacklistedType { value = 100, name = "ShouldNotAppear" };
63
-
64
- yield return null;
65
-
66
- // Act
67
- var serialized = reflector.Serialize(
68
- component,
69
- recursive: true,
70
- logger: _logger);
71
-
72
- var json = serialized.ToJson(reflector) ?? string.Empty;
73
- Debug.Log($"[BlacklistTypeTests] Serialized component:\n{json}");
74
-
75
- // Assert
76
- Assert.IsNotNull(serialized, "Serialized result should not be null.");
77
- Assert.IsNotNull(serialized.fields, "Serialized fields should not be null.");
78
-
79
- // Verify normal fields are present
80
- var normalIntFieldExists = serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.normalIntField));
81
- var normalStringFieldExists = serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.normalStringField));
82
- var normalVectorFieldExists = serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.normalVectorField));
83
-
84
- Assert.IsTrue(normalIntFieldExists, "Normal int field should be serialized.");
85
- Assert.IsTrue(normalStringFieldExists, "Normal string field should be serialized.");
86
- Assert.IsTrue(normalVectorFieldExists, "Normal vector field should be serialized.");
87
-
88
- // Verify blacklisted field is NOT present
89
- var blacklistedFieldExists = serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.blacklistedTypeField));
90
- Assert.IsFalse(blacklistedFieldExists, "Blacklisted type field should NOT be serialized.");
91
-
92
- // Also verify the JSON string does not contain the blacklisted field name
93
- Assert.IsFalse(json.Contains("blacklistedTypeField"), "JSON should not contain 'blacklistedTypeField'.");
94
- Assert.IsFalse(json.Contains("ShouldNotAppear"), "JSON should not contain the value from blacklisted type.");
95
-
96
- yield return null;
97
- }
98
-
99
- [UnityTest]
100
- public IEnumerator Serialize_Component_WithBlacklistedStruct_Field_ShouldNotContainBlacklistedField()
101
- {
102
- // Arrange
103
- var reflector = CreateTestReflector();
104
-
105
- // Blacklist the test struct type
106
- reflector.Converters.BlacklistType(typeof(BlacklistedStruct));
107
-
108
- // Create a GameObject with the test component
109
- var go = new GameObject("TestGameObject_BlacklistStruct");
110
- var component = go.AddComponent<BlacklistTestScript>();
111
-
112
- // Set values on the component
113
- component.normalIntField = 123;
114
- component.blacklistedStructField = new BlacklistedStruct { x = 10.5f, y = 20.5f };
115
-
116
- yield return null;
117
-
118
- // Act
119
- var serialized = reflector.Serialize(
120
- component,
121
- recursive: true,
122
- logger: _logger);
123
-
124
- var json = serialized.ToJson(reflector) ?? string.Empty;
125
- Debug.Log($"[BlacklistTypeTests] Serialized component with struct:\n{json}");
126
-
127
- // Assert
128
- Assert.IsNotNull(serialized, "Serialized result should not be null.");
129
- Assert.IsNotNull(serialized.fields, "Serialized fields should not be null.");
130
-
131
- // Verify normal field is present
132
- var normalIntFieldExists = serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.normalIntField));
133
- Assert.IsTrue(normalIntFieldExists, "Normal int field should be serialized.");
134
-
135
- // Verify blacklisted struct field is NOT present
136
- var blacklistedStructFieldExists = serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.blacklistedStructField));
137
- Assert.IsFalse(blacklistedStructFieldExists, "Blacklisted struct field should NOT be serialized.");
138
-
139
- // Also verify the JSON string does not contain the blacklisted field name
140
- Assert.IsFalse(json.Contains("blacklistedStructField"), "JSON should not contain 'blacklistedStructField'.");
141
-
142
- yield return null;
143
- }
144
-
145
- [UnityTest]
146
- public IEnumerator Serialize_Component_WithMultipleBlacklistedTypes_ShouldNotContainAnyBlacklistedFields()
147
- {
148
- // Arrange
149
- var reflector = CreateTestReflector();
150
-
151
- // Blacklist both test types
152
- reflector.Converters.BlacklistType(typeof(BlacklistedType));
153
- reflector.Converters.BlacklistType(typeof(BlacklistedStruct));
154
-
155
- // Create a GameObject with the test component
156
- var go = new GameObject("TestGameObject_MultiBlacklist");
157
- var component = go.AddComponent<BlacklistTestScript>();
158
-
159
- // Set values on the component
160
- component.normalIntField = 999;
161
- component.normalStringField = "This should appear";
162
- component.normalVectorField = Vector3.one;
163
- component.blacklistedTypeField = new BlacklistedType { value = 1, name = "Hidden1" };
164
- component.blacklistedStructField = new BlacklistedStruct { x = 1, y = 2 };
165
-
166
- yield return null;
167
-
168
- // Act
169
- var serialized = reflector.Serialize(
170
- component,
171
- recursive: true,
172
- logger: _logger);
173
-
174
- var json = serialized.ToJson(reflector) ?? string.Empty;
175
- Debug.Log($"[BlacklistTypeTests] Serialized component with multiple blacklisted types:\n{json}");
176
-
177
- // Assert
178
- Assert.IsNotNull(serialized, "Serialized result should not be null.");
179
- Assert.IsNotNull(serialized.fields, "Serialized fields should not be null.");
180
-
181
- // Verify normal fields are present
182
- Assert.IsTrue(serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.normalIntField)),
183
- "Normal int field should be serialized.");
184
- Assert.IsTrue(serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.normalStringField)),
185
- "Normal string field should be serialized.");
186
- Assert.IsTrue(serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.normalVectorField)),
187
- "Normal vector field should be serialized.");
188
-
189
- // Verify blacklisted fields are NOT present
190
- Assert.IsFalse(serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.blacklistedTypeField)),
191
- "Blacklisted type field should NOT be serialized.");
192
- Assert.IsFalse(serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.blacklistedStructField)),
193
- "Blacklisted struct field should NOT be serialized.");
194
-
195
- // Also verify the JSON string does not contain the blacklisted field names
196
- Assert.IsFalse(json.Contains("blacklistedTypeField"), "JSON should not contain 'blacklistedTypeField'.");
197
- Assert.IsFalse(json.Contains("blacklistedStructField"), "JSON should not contain 'blacklistedStructField'.");
198
- Assert.IsFalse(json.Contains("Hidden1"), "JSON should not contain values from blacklisted types.");
199
-
200
- yield return null;
201
- }
202
-
203
- [UnityTest]
204
- public IEnumerator Serialize_Component_WithoutBlacklist_ShouldContainAllFields()
205
- {
206
- // Arrange
207
- var reflector = CreateTestReflector();
208
- // NOTE: We do NOT blacklist any types here
209
-
210
- // Create a GameObject with the test component
211
- var go = new GameObject("TestGameObject_NoBlacklist");
212
- var component = go.AddComponent<BlacklistTestScript>();
213
-
214
- // Set values on the component
215
- component.normalIntField = 42;
216
- component.normalStringField = "Test";
217
- component.blacklistedTypeField = new BlacklistedType { value = 100, name = "ShouldAppear" };
218
- component.blacklistedStructField = new BlacklistedStruct { x = 5, y = 10 };
219
-
220
- yield return null;
221
-
222
- // Act
223
- var serialized = reflector.Serialize(
224
- component,
225
- recursive: true,
226
- logger: _logger);
227
-
228
- var json = serialized.ToJson(reflector) ?? string.Empty;
229
- Debug.Log($"[BlacklistTypeTests] Serialized component without blacklist:\n{json}");
230
-
231
- // Assert
232
- Assert.IsNotNull(serialized, "Serialized result should not be null.");
233
- Assert.IsNotNull(serialized.fields, "Serialized fields should not be null.");
234
-
235
- // Verify ALL fields are present (since nothing is blacklisted)
236
- Assert.IsTrue(serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.normalIntField)),
237
- "Normal int field should be serialized.");
238
- Assert.IsTrue(serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.normalStringField)),
239
- "Normal string field should be serialized.");
240
- Assert.IsTrue(serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.blacklistedTypeField)),
241
- "BlacklistedType field should be serialized when NOT blacklisted.");
242
- Assert.IsTrue(serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.blacklistedStructField)),
243
- "BlacklistedStruct field should be serialized when NOT blacklisted.");
244
-
245
- yield return null;
246
- }
247
-
248
- [UnityTest]
249
- public IEnumerator Serialize_Material_WithBlacklistedColor_ShouldNotContainColorMembers()
250
- {
251
- // Arrange
252
- var reflector = CreateTestReflector();
253
-
254
- // Blacklist the UnityEngine.Color type
255
- reflector.Converters.BlacklistType(typeof(Color));
256
-
257
- // Create a Material instance using executor (handles cleanup automatically)
258
- var materialEx = new CreateMaterialExecutor("TestMaterial_BlacklistColor.mat", "Standard", "Assets", "Unity-MCP-Test", "BlacklistTypeTests");
259
-
260
- // Validation executor
261
- var validateEx = new LazyNodeExecutor();
262
- validateEx.SetAction<object?>((input) =>
263
- {
264
- var material = materialEx.Asset;
265
- Assert.IsNotNull(material, "Material should be created.");
266
-
267
- // Set color on the material
268
- material!.color = new Color(1f, 0.5f, 0.25f, 1f);
269
- material.SetColor("_EmissionColor", new Color(0.1f, 0.2f, 0.3f, 1f));
270
-
271
- // Act
272
- var serialized = reflector.Serialize(
273
- material,
274
- recursive: true,
275
- logger: _logger);
276
-
277
- var json = serialized.ToJson(reflector) ?? string.Empty;
278
- Debug.Log($"[BlacklistTypeTests] Serialized Material with blacklisted Color:\n{json}");
279
-
280
- // Assert
281
- Assert.IsNotNull(serialized, "Serialized result should not be null.");
282
-
283
- // Helper function to recursively check all fields for Color type
284
- void AssertNoColorFields(SerializedMember member, string path)
285
- {
286
- if (member.fields != null)
287
- {
288
- var colorTypeId = TypeUtils.GetTypeId<UnityEngine.Color>();
289
- foreach (var field in member.fields)
290
- {
291
- // Check that no field is of Color type
292
- var isColorType = field.typeName == colorTypeId;
293
- Assert.IsFalse(isColorType,
294
- $"Field '{path}.{field.name}' of type '{field.typeName}' should not be serialized when Color is blacklisted.");
295
-
296
- // Recursively check nested fields
297
- AssertNoColorFields(field, $"{path}.{field.name}");
298
- }
299
- }
300
- }
301
-
302
- // Check all fields recursively
303
- AssertNoColorFields(serialized, "root");
304
-
305
- // Also check that the JSON does not contain UnityEngine.Color type references
306
- Assert.IsFalse(json.Contains("UnityEngine.Color"),
307
- "JSON should not contain 'UnityEngine.Color' type reference.");
308
- });
309
-
310
- materialEx.AddChild(validateEx);
311
- materialEx.Execute();
312
-
313
- yield return null;
314
- }
315
-
316
- [UnityTest]
317
- public IEnumerator Serialize_Component_BlacklistByTypeName_ShouldNotContainBlacklistedField()
318
- {
319
- // Arrange
320
- var reflector = CreateTestReflector();
321
-
322
- // Blacklist using full type name string (similar to how TMPro types are blacklisted)
323
- var fullTypeName = typeof(BlacklistedType).FullName!;
324
- var type = com.IvanMurzak.ReflectorNet.Utils.TypeUtils.GetType(fullTypeName);
325
- Assert.IsNotNull(type, $"Type '{fullTypeName}' should be resolvable.");
326
- reflector.Converters.BlacklistType(type!);
327
-
328
- // Create a GameObject with the test component
329
- var go = new GameObject("TestGameObject_BlacklistByName");
330
- var component = go.AddComponent<BlacklistTestScript>();
331
-
332
- // Set values on the component
333
- component.normalIntField = 77;
334
- component.blacklistedTypeField = new BlacklistedType { value = 200, name = "HiddenByName" };
335
-
336
- yield return null;
337
-
338
- // Act
339
- var serialized = reflector.Serialize(
340
- component,
341
- recursive: true,
342
- logger: _logger);
343
-
344
- var json = serialized.ToJson(reflector) ?? string.Empty;
345
- Debug.Log($"[BlacklistTypeTests] Serialized component with type blacklisted by name:\n{json}");
346
-
347
- // Assert
348
- Assert.IsNotNull(serialized, "Serialized result should not be null.");
349
- Assert.IsNotNull(serialized.fields, "Serialized fields should not be null.");
350
-
351
- // Verify normal field is present
352
- Assert.IsTrue(serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.normalIntField)),
353
- "Normal int field should be serialized.");
354
-
355
- // Verify blacklisted field is NOT present
356
- Assert.IsFalse(serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.blacklistedTypeField)),
357
- "Blacklisted type field should NOT be serialized when blacklisted by type name.");
358
-
359
- // Also verify the JSON string does not contain the blacklisted field name
360
- Assert.IsFalse(json.Contains("blacklistedTypeField"), "JSON should not contain 'blacklistedTypeField'.");
361
- Assert.IsFalse(json.Contains("HiddenByName"), "JSON should not contain values from blacklisted types.");
362
-
363
- yield return null;
364
- }
365
-
366
- [UnityTest]
367
- public IEnumerator Serialize_Component_WithBlacklistedType_Property_ShouldNotContainBlacklistedProperty()
368
- {
369
- // Arrange
370
- var reflector = CreateTestReflector();
371
-
372
- // Blacklist the test type
373
- reflector.Converters.BlacklistType(typeof(BlacklistedType));
374
-
375
- // Create a GameObject with the test component
376
- var go = new GameObject("TestGameObject_BlacklistProperty");
377
- var component = go.AddComponent<BlacklistTestScript>();
378
-
379
- // Set values on the component
380
- component.normalIntField = 55;
381
- component.BlacklistedTypeProperty = new BlacklistedType { value = 300, name = "PropertyShouldNotAppear" };
382
-
383
- yield return null;
384
-
385
- // Act
386
- var serialized = reflector.Serialize(
387
- component,
388
- recursive: true,
389
- logger: _logger);
390
-
391
- var json = serialized.ToJson(reflector) ?? string.Empty;
392
- Debug.Log($"[BlacklistTypeTests] Serialized component with blacklisted property:\n{json}");
393
-
394
- // Assert
395
- Assert.IsNotNull(serialized, "Serialized result should not be null.");
396
- Assert.IsNotNull(serialized.fields, "Serialized fields should not be null.");
397
-
398
- // Verify normal field is present
399
- Assert.IsTrue(serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.normalIntField)),
400
- "Normal int field should be serialized.");
401
-
402
- // Verify blacklisted property is NOT present in props
403
- if (serialized.props != null)
404
- {
405
- var blacklistedPropertyExists = serialized.props.Any(p => p.name == nameof(BlacklistTestScript.BlacklistedTypeProperty));
406
- Assert.IsFalse(blacklistedPropertyExists, "Blacklisted type property should NOT be serialized.");
407
- }
408
-
409
- // Also verify the JSON string does not contain the blacklisted property name or value
410
- Assert.IsFalse(json.Contains("BlacklistedTypeProperty"), "JSON should not contain 'BlacklistedTypeProperty'.");
411
- Assert.IsFalse(json.Contains("PropertyShouldNotAppear"), "JSON should not contain the value from blacklisted type property.");
412
-
413
- yield return null;
414
- }
415
- }
416
- }
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 System.Linq;
14
+ using com.IvanMurzak.ReflectorNet;
15
+ using com.IvanMurzak.ReflectorNet.Model;
16
+ using com.IvanMurzak.ReflectorNet.Utils;
17
+ using com.AtelierAI.Unity.Copilot.Editor.Tests.Utils;
18
+ using com.AtelierAI.Unity.Copilot.TestFiles;
19
+ using NUnit.Framework;
20
+ using UnityEngine;
21
+ using UnityEngine.TestTools;
22
+
23
+ namespace com.AtelierAI.Unity.Copilot.Editor.Tests
24
+ {
25
+ /// <summary>
26
+ /// Tests to verify that blacklisted types are excluded from serialization.
27
+ /// </summary>
28
+ public class BlacklistTypeTests : BaseTest
29
+ {
30
+ [UnitySetUp]
31
+ public override IEnumerator SetUp() => base.SetUp();
32
+
33
+ [UnityTearDown]
34
+ public override IEnumerator TearDown() => base.TearDown();
35
+
36
+ /// <summary>
37
+ /// Creates a new Reflector configured similarly to UnityCopilotPluginEditor.CreateDefaultReflector()
38
+ /// but with custom blacklisted types for testing.
39
+ /// </summary>
40
+ private Reflector CreateTestReflector()
41
+ {
42
+ return UnityCopilotPluginEditor.Instance.CreateDefaultReflector();
43
+ }
44
+
45
+ [UnityTest]
46
+ public IEnumerator Serialize_Component_WithBlacklistedType_Field_ShouldNotContainBlacklistedField()
47
+ {
48
+ // Arrange
49
+ var reflector = CreateTestReflector();
50
+
51
+ // Blacklist the test types
52
+ reflector.Converters.BlacklistType(typeof(BlacklistedType));
53
+
54
+ // Create a GameObject with the test component
55
+ var go = new GameObject("TestGameObject_Blacklist");
56
+ var component = go.AddComponent<BlacklistTestScript>();
57
+
58
+ // Set values on the component
59
+ component.normalIntField = 42;
60
+ component.normalStringField = "Hello World";
61
+ component.normalVectorField = new Vector3(1, 2, 3);
62
+ component.blacklistedTypeField = new BlacklistedType { value = 100, name = "ShouldNotAppear" };
63
+
64
+ yield return null;
65
+
66
+ // Act
67
+ var serialized = reflector.Serialize(
68
+ component,
69
+ recursive: true,
70
+ logger: _logger);
71
+
72
+ var json = serialized.ToJson(reflector) ?? string.Empty;
73
+ Debug.Log($"[BlacklistTypeTests] Serialized component:\n{json}");
74
+
75
+ // Assert
76
+ Assert.IsNotNull(serialized, "Serialized result should not be null.");
77
+ Assert.IsNotNull(serialized.fields, "Serialized fields should not be null.");
78
+
79
+ // Verify normal fields are present
80
+ var normalIntFieldExists = serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.normalIntField));
81
+ var normalStringFieldExists = serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.normalStringField));
82
+ var normalVectorFieldExists = serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.normalVectorField));
83
+
84
+ Assert.IsTrue(normalIntFieldExists, "Normal int field should be serialized.");
85
+ Assert.IsTrue(normalStringFieldExists, "Normal string field should be serialized.");
86
+ Assert.IsTrue(normalVectorFieldExists, "Normal vector field should be serialized.");
87
+
88
+ // Verify blacklisted field is NOT present
89
+ var blacklistedFieldExists = serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.blacklistedTypeField));
90
+ Assert.IsFalse(blacklistedFieldExists, "Blacklisted type field should NOT be serialized.");
91
+
92
+ // Also verify the JSON string does not contain the blacklisted field name
93
+ Assert.IsFalse(json.Contains("blacklistedTypeField"), "JSON should not contain 'blacklistedTypeField'.");
94
+ Assert.IsFalse(json.Contains("ShouldNotAppear"), "JSON should not contain the value from blacklisted type.");
95
+
96
+ yield return null;
97
+ }
98
+
99
+ [UnityTest]
100
+ public IEnumerator Serialize_Component_WithBlacklistedStruct_Field_ShouldNotContainBlacklistedField()
101
+ {
102
+ // Arrange
103
+ var reflector = CreateTestReflector();
104
+
105
+ // Blacklist the test struct type
106
+ reflector.Converters.BlacklistType(typeof(BlacklistedStruct));
107
+
108
+ // Create a GameObject with the test component
109
+ var go = new GameObject("TestGameObject_BlacklistStruct");
110
+ var component = go.AddComponent<BlacklistTestScript>();
111
+
112
+ // Set values on the component
113
+ component.normalIntField = 123;
114
+ component.blacklistedStructField = new BlacklistedStruct { x = 10.5f, y = 20.5f };
115
+
116
+ yield return null;
117
+
118
+ // Act
119
+ var serialized = reflector.Serialize(
120
+ component,
121
+ recursive: true,
122
+ logger: _logger);
123
+
124
+ var json = serialized.ToJson(reflector) ?? string.Empty;
125
+ Debug.Log($"[BlacklistTypeTests] Serialized component with struct:\n{json}");
126
+
127
+ // Assert
128
+ Assert.IsNotNull(serialized, "Serialized result should not be null.");
129
+ Assert.IsNotNull(serialized.fields, "Serialized fields should not be null.");
130
+
131
+ // Verify normal field is present
132
+ var normalIntFieldExists = serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.normalIntField));
133
+ Assert.IsTrue(normalIntFieldExists, "Normal int field should be serialized.");
134
+
135
+ // Verify blacklisted struct field is NOT present
136
+ var blacklistedStructFieldExists = serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.blacklistedStructField));
137
+ Assert.IsFalse(blacklistedStructFieldExists, "Blacklisted struct field should NOT be serialized.");
138
+
139
+ // Also verify the JSON string does not contain the blacklisted field name
140
+ Assert.IsFalse(json.Contains("blacklistedStructField"), "JSON should not contain 'blacklistedStructField'.");
141
+
142
+ yield return null;
143
+ }
144
+
145
+ [UnityTest]
146
+ public IEnumerator Serialize_Component_WithMultipleBlacklistedTypes_ShouldNotContainAnyBlacklistedFields()
147
+ {
148
+ // Arrange
149
+ var reflector = CreateTestReflector();
150
+
151
+ // Blacklist both test types
152
+ reflector.Converters.BlacklistType(typeof(BlacklistedType));
153
+ reflector.Converters.BlacklistType(typeof(BlacklistedStruct));
154
+
155
+ // Create a GameObject with the test component
156
+ var go = new GameObject("TestGameObject_MultiBlacklist");
157
+ var component = go.AddComponent<BlacklistTestScript>();
158
+
159
+ // Set values on the component
160
+ component.normalIntField = 999;
161
+ component.normalStringField = "This should appear";
162
+ component.normalVectorField = Vector3.one;
163
+ component.blacklistedTypeField = new BlacklistedType { value = 1, name = "Hidden1" };
164
+ component.blacklistedStructField = new BlacklistedStruct { x = 1, y = 2 };
165
+
166
+ yield return null;
167
+
168
+ // Act
169
+ var serialized = reflector.Serialize(
170
+ component,
171
+ recursive: true,
172
+ logger: _logger);
173
+
174
+ var json = serialized.ToJson(reflector) ?? string.Empty;
175
+ Debug.Log($"[BlacklistTypeTests] Serialized component with multiple blacklisted types:\n{json}");
176
+
177
+ // Assert
178
+ Assert.IsNotNull(serialized, "Serialized result should not be null.");
179
+ Assert.IsNotNull(serialized.fields, "Serialized fields should not be null.");
180
+
181
+ // Verify normal fields are present
182
+ Assert.IsTrue(serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.normalIntField)),
183
+ "Normal int field should be serialized.");
184
+ Assert.IsTrue(serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.normalStringField)),
185
+ "Normal string field should be serialized.");
186
+ Assert.IsTrue(serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.normalVectorField)),
187
+ "Normal vector field should be serialized.");
188
+
189
+ // Verify blacklisted fields are NOT present
190
+ Assert.IsFalse(serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.blacklistedTypeField)),
191
+ "Blacklisted type field should NOT be serialized.");
192
+ Assert.IsFalse(serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.blacklistedStructField)),
193
+ "Blacklisted struct field should NOT be serialized.");
194
+
195
+ // Also verify the JSON string does not contain the blacklisted field names
196
+ Assert.IsFalse(json.Contains("blacklistedTypeField"), "JSON should not contain 'blacklistedTypeField'.");
197
+ Assert.IsFalse(json.Contains("blacklistedStructField"), "JSON should not contain 'blacklistedStructField'.");
198
+ Assert.IsFalse(json.Contains("Hidden1"), "JSON should not contain values from blacklisted types.");
199
+
200
+ yield return null;
201
+ }
202
+
203
+ [UnityTest]
204
+ public IEnumerator Serialize_Component_WithoutBlacklist_ShouldContainAllFields()
205
+ {
206
+ // Arrange
207
+ var reflector = CreateTestReflector();
208
+ // NOTE: We do NOT blacklist any types here
209
+
210
+ // Create a GameObject with the test component
211
+ var go = new GameObject("TestGameObject_NoBlacklist");
212
+ var component = go.AddComponent<BlacklistTestScript>();
213
+
214
+ // Set values on the component
215
+ component.normalIntField = 42;
216
+ component.normalStringField = "Test";
217
+ component.blacklistedTypeField = new BlacklistedType { value = 100, name = "ShouldAppear" };
218
+ component.blacklistedStructField = new BlacklistedStruct { x = 5, y = 10 };
219
+
220
+ yield return null;
221
+
222
+ // Act
223
+ var serialized = reflector.Serialize(
224
+ component,
225
+ recursive: true,
226
+ logger: _logger);
227
+
228
+ var json = serialized.ToJson(reflector) ?? string.Empty;
229
+ Debug.Log($"[BlacklistTypeTests] Serialized component without blacklist:\n{json}");
230
+
231
+ // Assert
232
+ Assert.IsNotNull(serialized, "Serialized result should not be null.");
233
+ Assert.IsNotNull(serialized.fields, "Serialized fields should not be null.");
234
+
235
+ // Verify ALL fields are present (since nothing is blacklisted)
236
+ Assert.IsTrue(serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.normalIntField)),
237
+ "Normal int field should be serialized.");
238
+ Assert.IsTrue(serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.normalStringField)),
239
+ "Normal string field should be serialized.");
240
+ Assert.IsTrue(serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.blacklistedTypeField)),
241
+ "BlacklistedType field should be serialized when NOT blacklisted.");
242
+ Assert.IsTrue(serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.blacklistedStructField)),
243
+ "BlacklistedStruct field should be serialized when NOT blacklisted.");
244
+
245
+ yield return null;
246
+ }
247
+
248
+ [UnityTest]
249
+ public IEnumerator Serialize_Material_WithBlacklistedColor_ShouldNotContainColorMembers()
250
+ {
251
+ // Arrange
252
+ var reflector = CreateTestReflector();
253
+
254
+ // Blacklist the UnityEngine.Color type
255
+ reflector.Converters.BlacklistType(typeof(Color));
256
+
257
+ // Create a Material instance using executor (handles cleanup automatically)
258
+ var materialEx = new CreateMaterialExecutor("TestMaterial_BlacklistColor.mat", "Standard", "Assets", "Unity-Uco-Test", "BlacklistTypeTests");
259
+
260
+ // Validation executor
261
+ var validateEx = new LazyNodeExecutor();
262
+ validateEx.SetAction<object?>((input) =>
263
+ {
264
+ var material = materialEx.Asset;
265
+ Assert.IsNotNull(material, "Material should be created.");
266
+
267
+ // Set color on the material
268
+ material!.color = new Color(1f, 0.5f, 0.25f, 1f);
269
+ material.SetColor("_EmissionColor", new Color(0.1f, 0.2f, 0.3f, 1f));
270
+
271
+ // Act
272
+ var serialized = reflector.Serialize(
273
+ material,
274
+ recursive: true,
275
+ logger: _logger);
276
+
277
+ var json = serialized.ToJson(reflector) ?? string.Empty;
278
+ Debug.Log($"[BlacklistTypeTests] Serialized Material with blacklisted Color:\n{json}");
279
+
280
+ // Assert
281
+ Assert.IsNotNull(serialized, "Serialized result should not be null.");
282
+
283
+ // Helper function to recursively check all fields for Color type
284
+ void AssertNoColorFields(SerializedMember member, string path)
285
+ {
286
+ if (member.fields != null)
287
+ {
288
+ var colorTypeId = TypeUtils.GetTypeId<UnityEngine.Color>();
289
+ foreach (var field in member.fields)
290
+ {
291
+ // Check that no field is of Color type
292
+ var isColorType = field.typeName == colorTypeId;
293
+ Assert.IsFalse(isColorType,
294
+ $"Field '{path}.{field.name}' of type '{field.typeName}' should not be serialized when Color is blacklisted.");
295
+
296
+ // Recursively check nested fields
297
+ AssertNoColorFields(field, $"{path}.{field.name}");
298
+ }
299
+ }
300
+ }
301
+
302
+ // Check all fields recursively
303
+ AssertNoColorFields(serialized, "root");
304
+
305
+ // Also check that the JSON does not contain UnityEngine.Color type references
306
+ Assert.IsFalse(json.Contains("UnityEngine.Color"),
307
+ "JSON should not contain 'UnityEngine.Color' type reference.");
308
+ });
309
+
310
+ materialEx.AddChild(validateEx);
311
+ materialEx.Execute();
312
+
313
+ yield return null;
314
+ }
315
+
316
+ [UnityTest]
317
+ public IEnumerator Serialize_Component_BlacklistByTypeName_ShouldNotContainBlacklistedField()
318
+ {
319
+ // Arrange
320
+ var reflector = CreateTestReflector();
321
+
322
+ // Blacklist using full type name string (similar to how TMPro types are blacklisted)
323
+ var fullTypeName = typeof(BlacklistedType).FullName!;
324
+ var type = com.IvanMurzak.ReflectorNet.Utils.TypeUtils.GetType(fullTypeName);
325
+ Assert.IsNotNull(type, $"Type '{fullTypeName}' should be resolvable.");
326
+ reflector.Converters.BlacklistType(type!);
327
+
328
+ // Create a GameObject with the test component
329
+ var go = new GameObject("TestGameObject_BlacklistByName");
330
+ var component = go.AddComponent<BlacklistTestScript>();
331
+
332
+ // Set values on the component
333
+ component.normalIntField = 77;
334
+ component.blacklistedTypeField = new BlacklistedType { value = 200, name = "HiddenByName" };
335
+
336
+ yield return null;
337
+
338
+ // Act
339
+ var serialized = reflector.Serialize(
340
+ component,
341
+ recursive: true,
342
+ logger: _logger);
343
+
344
+ var json = serialized.ToJson(reflector) ?? string.Empty;
345
+ Debug.Log($"[BlacklistTypeTests] Serialized component with type blacklisted by name:\n{json}");
346
+
347
+ // Assert
348
+ Assert.IsNotNull(serialized, "Serialized result should not be null.");
349
+ Assert.IsNotNull(serialized.fields, "Serialized fields should not be null.");
350
+
351
+ // Verify normal field is present
352
+ Assert.IsTrue(serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.normalIntField)),
353
+ "Normal int field should be serialized.");
354
+
355
+ // Verify blacklisted field is NOT present
356
+ Assert.IsFalse(serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.blacklistedTypeField)),
357
+ "Blacklisted type field should NOT be serialized when blacklisted by type name.");
358
+
359
+ // Also verify the JSON string does not contain the blacklisted field name
360
+ Assert.IsFalse(json.Contains("blacklistedTypeField"), "JSON should not contain 'blacklistedTypeField'.");
361
+ Assert.IsFalse(json.Contains("HiddenByName"), "JSON should not contain values from blacklisted types.");
362
+
363
+ yield return null;
364
+ }
365
+
366
+ [UnityTest]
367
+ public IEnumerator Serialize_Component_WithBlacklistedType_Property_ShouldNotContainBlacklistedProperty()
368
+ {
369
+ // Arrange
370
+ var reflector = CreateTestReflector();
371
+
372
+ // Blacklist the test type
373
+ reflector.Converters.BlacklistType(typeof(BlacklistedType));
374
+
375
+ // Create a GameObject with the test component
376
+ var go = new GameObject("TestGameObject_BlacklistProperty");
377
+ var component = go.AddComponent<BlacklistTestScript>();
378
+
379
+ // Set values on the component
380
+ component.normalIntField = 55;
381
+ component.BlacklistedTypeProperty = new BlacklistedType { value = 300, name = "PropertyShouldNotAppear" };
382
+
383
+ yield return null;
384
+
385
+ // Act
386
+ var serialized = reflector.Serialize(
387
+ component,
388
+ recursive: true,
389
+ logger: _logger);
390
+
391
+ var json = serialized.ToJson(reflector) ?? string.Empty;
392
+ Debug.Log($"[BlacklistTypeTests] Serialized component with blacklisted property:\n{json}");
393
+
394
+ // Assert
395
+ Assert.IsNotNull(serialized, "Serialized result should not be null.");
396
+ Assert.IsNotNull(serialized.fields, "Serialized fields should not be null.");
397
+
398
+ // Verify normal field is present
399
+ Assert.IsTrue(serialized.fields.Any(f => f.name == nameof(BlacklistTestScript.normalIntField)),
400
+ "Normal int field should be serialized.");
401
+
402
+ // Verify blacklisted property is NOT present in props
403
+ if (serialized.props != null)
404
+ {
405
+ var blacklistedPropertyExists = serialized.props.Any(p => p.name == nameof(BlacklistTestScript.BlacklistedTypeProperty));
406
+ Assert.IsFalse(blacklistedPropertyExists, "Blacklisted type property should NOT be serialized.");
407
+ }
408
+
409
+ // Also verify the JSON string does not contain the blacklisted property name or value
410
+ Assert.IsFalse(json.Contains("BlacklistedTypeProperty"), "JSON should not contain 'BlacklistedTypeProperty'.");
411
+ Assert.IsFalse(json.Contains("PropertyShouldNotAppear"), "JSON should not contain the value from blacklisted type property.");
412
+
413
+ yield return null;
414
+ }
415
+ }
416
+ }