@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,164 +1,164 @@
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.Text.RegularExpressions;
13
- using com.AtelierAI.Uco.Framework.Common.Model;
14
- using com.AtelierAI.Unity.Copilot.Editor.API;
15
- using NUnit.Framework;
16
- using UnityEditor;
17
- using UnityEngine;
18
- using UnityEngine.TestTools;
19
-
20
- namespace com.AtelierAI.Unity.Copilot.Editor.Tests
21
- {
22
- public class ScreenshotGameViewTests : BaseTest
23
- {
24
- // -----------------------------------------------------------------------
25
- // Setup — ensure Game View window is open and focused before each test
26
- // -----------------------------------------------------------------------
27
-
28
- [SetUp]
29
- public void EnsureGameViewOpen()
30
- {
31
- var gameViewType = System.Type.GetType("UnityEditor.GameView,UnityEditor");
32
- if (gameViewType == null)
33
- return;
34
-
35
- var gameView = EditorWindow.GetWindow(gameViewType, false, "Game", true);
36
- gameView.Show();
37
- gameView.Focus();
38
- gameView.Repaint();
39
- }
40
-
41
- // -----------------------------------------------------------------------
42
- // Helpers — mirror the exact checks the tool performs internally
43
- // -----------------------------------------------------------------------
44
-
45
- private static bool GameViewTypeAvailable =>
46
- System.Type.GetType("UnityEditor.GameView,UnityEditor") != null;
47
-
48
- private static void CloseGameView()
49
- {
50
- var gameViewType = System.Type.GetType("UnityEditor.GameView,UnityEditor");
51
- if (gameViewType == null) return;
52
-
53
- var windows = Resources.FindObjectsOfTypeAll(gameViewType);
54
- foreach (var window in windows)
55
- {
56
- if (window is EditorWindow editorWindow)
57
- editorWindow.Close();
58
- }
59
- }
60
-
61
- // -----------------------------------------------------------------------
62
- // Safety — the tool must never throw
63
- // -----------------------------------------------------------------------
64
-
65
- [Test]
66
- public void ScreenshotGameView_DoesNotThrow()
67
- {
68
- Assert.DoesNotThrow(() =>
69
- {
70
- var result = new Tool_Screenshot().ScreenshotGameView();
71
- Assert.IsNotNull(result);
72
- });
73
- }
74
-
75
- // -----------------------------------------------------------------------
76
- // Always-runs: result is either a success or one of the known error messages
77
- // -----------------------------------------------------------------------
78
-
79
- [Test]
80
- public void ScreenshotGameView_ReturnsKnownResponseType()
81
- {
82
- var result = new Tool_Screenshot().ScreenshotGameView();
83
-
84
- Assert.IsNotNull(result, "Result must never be null");
85
- Assert.AreNotEqual(ResponseStatus.Error, result.Status,
86
- "Should return a non-error response when the Game View is open and focused");
87
- }
88
-
89
- // -----------------------------------------------------------------------
90
- // GameView type must always be resolvable inside the Unity Editor
91
- // -----------------------------------------------------------------------
92
-
93
- [Test]
94
- public void ScreenshotGameView_GameViewTypeFound_InEditorContext()
95
- {
96
- // UnityEditor.GameView is always present when running inside the Editor.
97
- Assert.IsTrue(GameViewTypeAvailable,
98
- "UnityEditor.GameView type must be resolvable in an Editor test context");
99
- }
100
-
101
- // -----------------------------------------------------------------------
102
- // Happy path — Game View is open and ready
103
- // -----------------------------------------------------------------------
104
-
105
- [Test]
106
- public void ScreenshotGameView_WhenGameViewReady_ReturnsImage()
107
- {
108
- var result = new Tool_Screenshot().ScreenshotGameView();
109
-
110
- Assert.IsNotNull(result);
111
- Assert.AreNotEqual(ResponseStatus.Error, result.Status,
112
- "Should return a non-error response when the Game View render texture is available");
113
- }
114
-
115
- // -----------------------------------------------------------------------
116
- // Error path — render texture unavailable (Game View closed)
117
- // -----------------------------------------------------------------------
118
-
119
- [Test]
120
- public void ScreenshotGameView_WhenRenderTextureNotReady_ReturnsSpecificError()
121
- {
122
- CloseGameView();
123
-
124
- var result = new Tool_Screenshot().ScreenshotGameView();
125
-
126
- Assert.IsNotNull(result);
127
- Assert.AreEqual(ResponseStatus.Error, result.Status,
128
- "Should return an error when the render texture is not available");
129
- }
130
-
131
- // -----------------------------------------------------------------------
132
- // Full MCP framework path
133
- // -----------------------------------------------------------------------
134
-
135
- [Test]
136
- public void ScreenshotGameView_ViaRunTool_WhenGameViewReady_Succeeds()
137
- {
138
- // Method takes no parameters; an empty JSON object is the correct input.
139
- RunTool("screenshot-game-view", "{}");
140
- }
141
-
142
- [Test]
143
- public void ScreenshotGameView_ViaRunTool_WhenRenderTextureNotReady_ReturnsErrorJson()
144
- {
145
- CloseGameView();
146
-
147
- LogAssert.ignoreFailingMessages = true;
148
- try
149
- {
150
- var raw = RunToolRaw("screenshot-game-view", "{}");
151
-
152
- Assert.IsNotNull(raw, "Raw result must not be null");
153
- Assert.IsTrue(
154
- raw.Contains("No Game View window") ||
155
- raw.Contains("Game View render texture is not available"),
156
- $"Expected a known error message. Actual JSON:\n{raw}");
157
- }
158
- finally
159
- {
160
- LogAssert.ignoreFailingMessages = false;
161
- }
162
- }
163
- }
164
- }
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.Text.RegularExpressions;
13
+ using com.AtelierAI.Uco.Framework.Common.Model;
14
+ using com.AtelierAI.Unity.Copilot.Editor.API;
15
+ using NUnit.Framework;
16
+ using UnityEditor;
17
+ using UnityEngine;
18
+ using UnityEngine.TestTools;
19
+
20
+ namespace com.AtelierAI.Unity.Copilot.Editor.Tests
21
+ {
22
+ public class ScreenshotGameViewTests : BaseTest
23
+ {
24
+ // -----------------------------------------------------------------------
25
+ // Setup — ensure Game View window is open and focused before each test
26
+ // -----------------------------------------------------------------------
27
+
28
+ [SetUp]
29
+ public void EnsureGameViewOpen()
30
+ {
31
+ var gameViewType = System.Type.GetType("UnityEditor.GameView,UnityEditor");
32
+ if (gameViewType == null)
33
+ return;
34
+
35
+ var gameView = EditorWindow.GetWindow(gameViewType, false, "Game", true);
36
+ gameView.Show();
37
+ gameView.Focus();
38
+ gameView.Repaint();
39
+ }
40
+
41
+ // -----------------------------------------------------------------------
42
+ // Helpers — mirror the exact checks the tool performs internally
43
+ // -----------------------------------------------------------------------
44
+
45
+ private static bool GameViewTypeAvailable =>
46
+ System.Type.GetType("UnityEditor.GameView,UnityEditor") != null;
47
+
48
+ private static void CloseGameView()
49
+ {
50
+ var gameViewType = System.Type.GetType("UnityEditor.GameView,UnityEditor");
51
+ if (gameViewType == null) return;
52
+
53
+ var windows = Resources.FindObjectsOfTypeAll(gameViewType);
54
+ foreach (var window in windows)
55
+ {
56
+ if (window is EditorWindow editorWindow)
57
+ editorWindow.Close();
58
+ }
59
+ }
60
+
61
+ // -----------------------------------------------------------------------
62
+ // Safety — the tool must never throw
63
+ // -----------------------------------------------------------------------
64
+
65
+ [Test]
66
+ public void ScreenshotGameView_DoesNotThrow()
67
+ {
68
+ Assert.DoesNotThrow(() =>
69
+ {
70
+ var result = new Tool_Screenshot().ScreenshotGameView();
71
+ Assert.IsNotNull(result);
72
+ });
73
+ }
74
+
75
+ // -----------------------------------------------------------------------
76
+ // Always-runs: result is either a success or one of the known error messages
77
+ // -----------------------------------------------------------------------
78
+
79
+ [Test]
80
+ public void ScreenshotGameView_ReturnsKnownResponseType()
81
+ {
82
+ var result = new Tool_Screenshot().ScreenshotGameView();
83
+
84
+ Assert.IsNotNull(result, "Result must never be null");
85
+ Assert.AreNotEqual(ResponseStatus.Error, result.Status,
86
+ "Should return a non-error response when the Game View is open and focused");
87
+ }
88
+
89
+ // -----------------------------------------------------------------------
90
+ // GameView type must always be resolvable inside the Unity Editor
91
+ // -----------------------------------------------------------------------
92
+
93
+ [Test]
94
+ public void ScreenshotGameView_GameViewTypeFound_InEditorContext()
95
+ {
96
+ // UnityEditor.GameView is always present when running inside the Editor.
97
+ Assert.IsTrue(GameViewTypeAvailable,
98
+ "UnityEditor.GameView type must be resolvable in an Editor test context");
99
+ }
100
+
101
+ // -----------------------------------------------------------------------
102
+ // Happy path — Game View is open and ready
103
+ // -----------------------------------------------------------------------
104
+
105
+ [Test]
106
+ public void ScreenshotGameView_WhenGameViewReady_ReturnsImage()
107
+ {
108
+ var result = new Tool_Screenshot().ScreenshotGameView();
109
+
110
+ Assert.IsNotNull(result);
111
+ Assert.AreNotEqual(ResponseStatus.Error, result.Status,
112
+ "Should return a non-error response when the Game View render texture is available");
113
+ }
114
+
115
+ // -----------------------------------------------------------------------
116
+ // Error path — render texture unavailable (Game View closed)
117
+ // -----------------------------------------------------------------------
118
+
119
+ [Test]
120
+ public void ScreenshotGameView_WhenRenderTextureNotReady_ReturnsSpecificError()
121
+ {
122
+ CloseGameView();
123
+
124
+ var result = new Tool_Screenshot().ScreenshotGameView();
125
+
126
+ Assert.IsNotNull(result);
127
+ Assert.AreEqual(ResponseStatus.Error, result.Status,
128
+ "Should return an error when the render texture is not available");
129
+ }
130
+
131
+ // -----------------------------------------------------------------------
132
+ // Full Uco framework path
133
+ // -----------------------------------------------------------------------
134
+
135
+ [Test]
136
+ public void ScreenshotGameView_ViaRunTool_WhenGameViewReady_Succeeds()
137
+ {
138
+ // Method takes no parameters; an empty JSON object is the correct input.
139
+ RunTool("screenshot-game-view", "{}");
140
+ }
141
+
142
+ [Test]
143
+ public void ScreenshotGameView_ViaRunTool_WhenRenderTextureNotReady_ReturnsErrorJson()
144
+ {
145
+ CloseGameView();
146
+
147
+ LogAssert.ignoreFailingMessages = true;
148
+ try
149
+ {
150
+ var raw = RunToolRaw("screenshot-game-view", "{}");
151
+
152
+ Assert.IsNotNull(raw, "Raw result must not be null");
153
+ Assert.IsTrue(
154
+ raw.Contains("No Game View window") ||
155
+ raw.Contains("Game View render texture is not available"),
156
+ $"Expected a known error message. Actual JSON:\n{raw}");
157
+ }
158
+ finally
159
+ {
160
+ LogAssert.ignoreFailingMessages = false;
161
+ }
162
+ }
163
+ }
164
+ }
@@ -1,155 +1,155 @@
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.Text.RegularExpressions;
13
- using com.AtelierAI.Uco.Framework.Common.Model;
14
- using com.AtelierAI.Unity.Copilot.Editor.API;
15
- using NUnit.Framework;
16
- using UnityEditor;
17
- using UnityEngine;
18
- using UnityEngine.TestTools;
19
-
20
- namespace com.AtelierAI.Unity.Copilot.Editor.Tests
21
- {
22
- public class ScreenshotSceneViewTests : BaseTest
23
- {
24
- // -----------------------------------------------------------------------
25
- // Setup — ensure Scene View window is open and focused before each test
26
- // -----------------------------------------------------------------------
27
-
28
- [SetUp]
29
- public void EnsureSceneViewOpen()
30
- {
31
- var sceneView = SceneView.lastActiveSceneView;
32
- if (sceneView == null && SceneView.sceneViews.Count > 0)
33
- sceneView = SceneView.sceneViews[0] as SceneView;
34
-
35
- if (sceneView == null)
36
- sceneView = EditorWindow.GetWindow<SceneView>("Scene", true);
37
-
38
- sceneView.Show();
39
- sceneView.Focus();
40
- sceneView.Repaint();
41
- }
42
-
43
- // -----------------------------------------------------------------------
44
- // Helpers
45
- // -----------------------------------------------------------------------
46
-
47
- /// <summary>
48
- /// Returns true when at least one SceneView is available (the tool can
49
- /// render), false when no SceneView window is open (CI / batch mode).
50
- /// </summary>
51
- private static bool SceneViewAvailable =>
52
- SceneView.lastActiveSceneView != null || SceneView.sceneViews.Count > 0;
53
-
54
- private static void CloseSceneView()
55
- {
56
- var windows = Resources.FindObjectsOfTypeAll<SceneView>();
57
- foreach (var window in windows)
58
- window.Close();
59
- }
60
-
61
- // -----------------------------------------------------------------------
62
- // No-SceneView error path — close the window to test error handling
63
- // -----------------------------------------------------------------------
64
-
65
- [Test]
66
- public void ScreenshotSceneView_WhenNoSceneViewOpen_ReturnsSpecificError()
67
- {
68
- CloseSceneView();
69
-
70
- var result = new Tool_Screenshot().ScreenshotSceneView(width: 320, height: 240);
71
-
72
- Assert.IsNotNull(result, "Result should never be null");
73
- Assert.AreEqual(ResponseStatus.Error, result.Status,
74
- "Without a SceneView the tool must return an error response");
75
- }
76
-
77
- // -----------------------------------------------------------------------
78
- // Happy path — Scene View is open and ready
79
- // -----------------------------------------------------------------------
80
-
81
- [Test]
82
- public void ScreenshotSceneView_WithSceneView_DefaultDimensions_ReturnsImage()
83
- {
84
- var result = new Tool_Screenshot().ScreenshotSceneView();
85
-
86
- Assert.IsNotNull(result);
87
- Assert.AreNotEqual(ResponseStatus.Error, result.Status,
88
- "Should succeed with default (1920×1080) dimensions when SceneView is available");
89
- }
90
-
91
- [Test]
92
- public void ScreenshotSceneView_WithSceneView_CustomDimensions_ReturnsImage()
93
- {
94
- var result = new Tool_Screenshot().ScreenshotSceneView(width: 640, height: 480);
95
-
96
- Assert.IsNotNull(result);
97
- Assert.AreNotEqual(ResponseStatus.Error, result.Status,
98
- "Should succeed with custom dimensions when SceneView is available");
99
- }
100
-
101
- [Test]
102
- public void ScreenshotSceneView_WithSceneView_SmallDimensions_ReturnsImage()
103
- {
104
- // Small texture keeps the test fast
105
- var result = new Tool_Screenshot().ScreenshotSceneView(width: 16, height: 16);
106
-
107
- Assert.IsNotNull(result);
108
- Assert.AreNotEqual(ResponseStatus.Error, result.Status,
109
- "Should succeed with small dimensions when SceneView is available");
110
- }
111
-
112
- // -----------------------------------------------------------------------
113
- // Full MCP framework path
114
- // -----------------------------------------------------------------------
115
-
116
- [Test]
117
- public void ScreenshotSceneView_ViaRunTool_WhenSceneViewReady_Succeeds()
118
- {
119
- RunTool("screenshot-scene-view", @"{""width"": 320, ""height"": 240}");
120
- }
121
-
122
- [Test]
123
- public void ScreenshotSceneView_ViaRunTool_WhenNoSceneView_ReturnsErrorJson()
124
- {
125
- CloseSceneView();
126
-
127
- LogAssert.ignoreFailingMessages = true;
128
- try
129
- {
130
- var raw = RunToolRaw("screenshot-scene-view", @"{""width"": 320, ""height"": 240}");
131
-
132
- Assert.IsNotNull(raw, "Raw result should not be null");
133
- Assert.IsTrue(
134
- raw.Contains("No Scene View") || raw.Contains("Scene View camera"),
135
- $"Expected 'No Scene View' error message. Actual JSON:\n{raw}");
136
- }
137
- finally
138
- {
139
- LogAssert.ignoreFailingMessages = false;
140
- }
141
- }
142
-
143
- [Test]
144
- public void ScreenshotSceneView_DoesNotThrowException()
145
- {
146
- // Regardless of whether a SceneView is open, the tool must never
147
- // throw — it should return a ResponseCallTool (success or error).
148
- Assert.DoesNotThrow(() =>
149
- {
150
- var result = new Tool_Screenshot().ScreenshotSceneView(width: 16, height: 16);
151
- Assert.IsNotNull(result);
152
- });
153
- }
154
- }
155
- }
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.Text.RegularExpressions;
13
+ using com.AtelierAI.Uco.Framework.Common.Model;
14
+ using com.AtelierAI.Unity.Copilot.Editor.API;
15
+ using NUnit.Framework;
16
+ using UnityEditor;
17
+ using UnityEngine;
18
+ using UnityEngine.TestTools;
19
+
20
+ namespace com.AtelierAI.Unity.Copilot.Editor.Tests
21
+ {
22
+ public class ScreenshotSceneViewTests : BaseTest
23
+ {
24
+ // -----------------------------------------------------------------------
25
+ // Setup — ensure Scene View window is open and focused before each test
26
+ // -----------------------------------------------------------------------
27
+
28
+ [SetUp]
29
+ public void EnsureSceneViewOpen()
30
+ {
31
+ var sceneView = SceneView.lastActiveSceneView;
32
+ if (sceneView == null && SceneView.sceneViews.Count > 0)
33
+ sceneView = SceneView.sceneViews[0] as SceneView;
34
+
35
+ if (sceneView == null)
36
+ sceneView = EditorWindow.GetWindow<SceneView>("Scene", true);
37
+
38
+ sceneView.Show();
39
+ sceneView.Focus();
40
+ sceneView.Repaint();
41
+ }
42
+
43
+ // -----------------------------------------------------------------------
44
+ // Helpers
45
+ // -----------------------------------------------------------------------
46
+
47
+ /// <summary>
48
+ /// Returns true when at least one SceneView is available (the tool can
49
+ /// render), false when no SceneView window is open (CI / batch mode).
50
+ /// </summary>
51
+ private static bool SceneViewAvailable =>
52
+ SceneView.lastActiveSceneView != null || SceneView.sceneViews.Count > 0;
53
+
54
+ private static void CloseSceneView()
55
+ {
56
+ var windows = Resources.FindObjectsOfTypeAll<SceneView>();
57
+ foreach (var window in windows)
58
+ window.Close();
59
+ }
60
+
61
+ // -----------------------------------------------------------------------
62
+ // No-SceneView error path — close the window to test error handling
63
+ // -----------------------------------------------------------------------
64
+
65
+ [Test]
66
+ public void ScreenshotSceneView_WhenNoSceneViewOpen_ReturnsSpecificError()
67
+ {
68
+ CloseSceneView();
69
+
70
+ var result = new Tool_Screenshot().ScreenshotSceneView(width: 320, height: 240);
71
+
72
+ Assert.IsNotNull(result, "Result should never be null");
73
+ Assert.AreEqual(ResponseStatus.Error, result.Status,
74
+ "Without a SceneView the tool must return an error response");
75
+ }
76
+
77
+ // -----------------------------------------------------------------------
78
+ // Happy path — Scene View is open and ready
79
+ // -----------------------------------------------------------------------
80
+
81
+ [Test]
82
+ public void ScreenshotSceneView_WithSceneView_DefaultDimensions_ReturnsImage()
83
+ {
84
+ var result = new Tool_Screenshot().ScreenshotSceneView();
85
+
86
+ Assert.IsNotNull(result);
87
+ Assert.AreNotEqual(ResponseStatus.Error, result.Status,
88
+ "Should succeed with default (1920×1080) dimensions when SceneView is available");
89
+ }
90
+
91
+ [Test]
92
+ public void ScreenshotSceneView_WithSceneView_CustomDimensions_ReturnsImage()
93
+ {
94
+ var result = new Tool_Screenshot().ScreenshotSceneView(width: 640, height: 480);
95
+
96
+ Assert.IsNotNull(result);
97
+ Assert.AreNotEqual(ResponseStatus.Error, result.Status,
98
+ "Should succeed with custom dimensions when SceneView is available");
99
+ }
100
+
101
+ [Test]
102
+ public void ScreenshotSceneView_WithSceneView_SmallDimensions_ReturnsImage()
103
+ {
104
+ // Small texture keeps the test fast
105
+ var result = new Tool_Screenshot().ScreenshotSceneView(width: 16, height: 16);
106
+
107
+ Assert.IsNotNull(result);
108
+ Assert.AreNotEqual(ResponseStatus.Error, result.Status,
109
+ "Should succeed with small dimensions when SceneView is available");
110
+ }
111
+
112
+ // -----------------------------------------------------------------------
113
+ // Full Uco framework path
114
+ // -----------------------------------------------------------------------
115
+
116
+ [Test]
117
+ public void ScreenshotSceneView_ViaRunTool_WhenSceneViewReady_Succeeds()
118
+ {
119
+ RunTool("screenshot-scene-view", @"{""width"": 320, ""height"": 240}");
120
+ }
121
+
122
+ [Test]
123
+ public void ScreenshotSceneView_ViaRunTool_WhenNoSceneView_ReturnsErrorJson()
124
+ {
125
+ CloseSceneView();
126
+
127
+ LogAssert.ignoreFailingMessages = true;
128
+ try
129
+ {
130
+ var raw = RunToolRaw("screenshot-scene-view", @"{""width"": 320, ""height"": 240}");
131
+
132
+ Assert.IsNotNull(raw, "Raw result should not be null");
133
+ Assert.IsTrue(
134
+ raw.Contains("No Scene View") || raw.Contains("Scene View camera"),
135
+ $"Expected 'No Scene View' error message. Actual JSON:\n{raw}");
136
+ }
137
+ finally
138
+ {
139
+ LogAssert.ignoreFailingMessages = false;
140
+ }
141
+ }
142
+
143
+ [Test]
144
+ public void ScreenshotSceneView_DoesNotThrowException()
145
+ {
146
+ // Regardless of whether a SceneView is open, the tool must never
147
+ // throw — it should return a ResponseCallTool (success or error).
148
+ Assert.DoesNotThrow(() =>
149
+ {
150
+ var result = new Tool_Screenshot().ScreenshotSceneView(width: 16, height: 16);
151
+ Assert.IsNotNull(result);
152
+ });
153
+ }
154
+ }
155
+ }